mysqldump 导出后导入 MySQL 字符混乱问题的“解决”

这其实是一个十分简单的数据库客户端连接字符集设置问题。

当我们用 mysqldump 导出数据时,只要数据库的字符集都有正确指定,那么导出的 SQL 文件的内容应该正确的设置了需要的字符集。

当我们把 SQL 文件拷贝需要导入的机器,传输过程中当然不存在 SQL 文件字符集被修改的理由。

因此,问题就出在我们导入 SQL 文件时,连接所采用的字符集。

有解决方案,需要设置 /etc/my.cnf 里,为 [mysqld] 添加
character-set-server=utf8
然后,在同一个 /etc/my.cnf  里,为默认的 mysql 客户端连接,[mysql] 添加同样的一行:
default-character-set=utf8

然后重启 MySQL 服务进程。
经过这样的修改后,我们在 Linux 终端里,运行 mysql 命令, 连接到数据库,敲 “\s” 命令,可以看到数据库连接状态中,有三个字符集为: utf8

Server characterset: utf8
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8

实际上,如果我们导出的 SQL 文件是正确的话, 没有必要修改服务器的字符集。
因此,我们注释掉 [mysqld] 里面的那行  character-set-server=utf8,重新启动 MySQL后,用 “\s” 指令,我们可以看到字符集只有 “Client” 和 “Conn.” 是采用了 utf8,用 select 语句查看表中的内容,所有原来的 ?? 都能正确显示为中文了。

Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8

作者: 甬洁网络

--移动互联网&物联网技术提供商