mysqldump的备份和还原




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

结果如下:
mysqldump的备份和还原_第1张图片

问题扩展

如果我想要改变表中的数据的编码字符集?我可以怎么做?

直接改sql的脚本中修改文本set names utf8; 然后将文件另存为utf8编码。
mysqldump的备份和还原_第2张图片
然后在本地mysql中 建库Birth:

mysql>create database Birth charset=utf8;

之后,我们将sql文件还原:

mysql -uroot -p Birth < Birth.sql
	powershell中不行就别勉强,使用cmd就好。

mysqldump的备份和还原_第3张图片

最后,我们测试下从本地数据库备份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.

打开test.sql:
mysqldump的备份和还原_第4张图片

你可能感兴趣的:(mysql)