Error:mysqldump: Character set ‘gbk>’ is not a compiled character set and is not specified in the 'C:\Prog
很多事后,我们在使用数据库的时候都是被编码所困惑,
又乱码了
WTF!!
在我使用mysqldump工具进行将远程数据库(www.yqun.xyz)中的Birth数据库备份到本地的过程中,出现了一下问题:
PS C:\Users\Administrator> mysqldump --column-statistics=0 --host=118.25.216.246 -uroot -p --databases Birth --default-c
haracter-set=gbk> ./Birth.sql
mysqldump: Character set 'gbk>' is not a compiled character set and is not specified in the 'C:\Program Files\MySQL\MySQL Server 8.0\share\charsets\Index.xml' file
参数说明:
--column-statistics=0, 8.0后的mysql版本和之后的区别引起的,只需要使用老版本的时候加上这个选项即可
--default-character-set=gbk, 默认情况下mysqldump使用的是utf8, 但服务器上的Birth数据库中的数据是gbk。
大概看一下,大概是因为编码问题。
然后看了下数据库的编码环境。
mysql> show variables like "character%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | gbk |
| character_set_connection | gbk |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | gbk |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
mysql>
博客写起来索然无味。。。。。。
然后其实这篇博客的内容主要是介绍下mysql的编码方面的知识和问题吧。
这些变量的作用原文地址.
当查询进入时,查询会被服务器从 character_set_client转换到character_set_connection,当查询执行时,查询会被服务器从
character_set_connection转换到列字符集。查询反回时,数据直接被服务器从列字符集转换到 character_set_results。
如何修改这些变量
set variable_name = 编码名
set character_set_server=utf8
set character_set_results=gbk
统一设置:
set names=utf8
对于这个错误的解决,只需要在gbk和>之间加一个空格。
然后反思一下我的需求的解决思路:
0. 首先我需要将一个远程数据库备份到本地
1. 那么我通过mysqldump来实现备份
2. 在请求之前我需要考虑我通过本地客户端向远程数据库发出的请求,请求回来的结果(数据集)的编码类型。->character_set_results | gbk
3. 然后再在mysqldump的参数中指定编码数据的编码类型:--default-character-set=gbk
4. 执行
那么最后正确的执行命令是:
mysqldump --column-statistics=0 --host=118.25.216.246 -uroot -p --databases Birth --default-c
haracter-set=gbk > ./Birth.sql
如果我想要改变表中的数据的编码字符集?我可以怎么做?
直接改sql的脚本中修改文本set names utf8; 然后将文件另存为utf8编码。
然后在本地mysql中 建库Birth:
mysql>create database Birth charset=utf8;
之后,我们将sql文件还原:
mysql -uroot -p Birth < Birth.sql
powershell中不行就别勉强,使用cmd就好。
最后,我们测试下从本地数据库备份Birth库(使用–default-character-set=utf8)
C:\Users\Administrator>mysqldump -uroot -p123456 --databases Birth --default-character-ser=utf8 > test.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.