2014-07-13 16:17:31
来 源
中存储网
MySQL
为保持单位电脑和家中电脑上 MySQL 数据同步,需要使用 mysqldump 命令导出数据库 ,但有个问题是导出的 SQL文件中所有的中文都为乱码。在网上搜索到问题出在字符编码 上。MySQL 有个--default-character-set=charse

为保持单位电脑和家中电脑上 MySQL 数据同步,需要使用 mysqldump 命令导出数据库 ,但有个问题是导出的 SQL 文件中所有的中文都为乱码。在网上搜索到问题出在字符编码 上。MySQL 有个
--default-character-set=charset_name参数可以 设定字符编码,5.0 手册中有这样一段话:

Use charset_name as the default
character set. If no character set is specified, mysqldump uses
utf8, and earlier versions use
latin1.

在MySQL中输入如下命令:

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

注意到高亮处显示信息。这表明数据库的字符集为 latin1 格式。从 mysqldump导出的SQL文件也可看出数据库默认编码格式:

CREATE TABLE `motd` (
...
) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;

注意,最后一行自己在创建表格时并没有写,这是mysqldump “默认”添加上去的内容。

而从上面的引用中我们得知:当不加任何参数时,导出的数据的格式为 utf8 格式, 这和数据库的编码(latin1)显然不一致,自然显示为乱码。这和之前在 Debian 上打开 Windows 上使用记事本编辑的文件显示乱码是一个道理。

解决方法就是在mysqldump命令后注明需要导出编码为 latin1 的 SQL 文件,命令如下:

mysqldump -u root --default-character-set=latin1 -p trekshot > trekshot.sql

目前已将此命令 alias 至 .bashrc 中。

shell script 中不能直接使用 alias 命令!参 npu.sh 文件

声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。