May
21
这两天苦于数据库的移植问题。由于是不同的主机,而库中的编辑不一致(开始没有考虑到这个问题)。导致移植后在另外一个主机中,变成了乱码显示。今天客户需要急忙对应了,经过仔细分析后,几十万条数据轻松正常导入恢复,主要是编码所致。
Array
1、开始打算用代码从原服务器中,生成CSV文件,再导入到另外的库中,但发现数据量多而且复杂。没办法分割出来正常的CSV字段,以失败告终。
2、从phpMyAdmin和命令行两种方式的导出/导入,都是乱码。再次失败。
Array
1、查查源库这边用的是什么编码,然后把它全部与导入端库的统一;
2、find / -name my.inf 结果发现源服务中没有配置文件!而在导入端服务器中有,default-character-set=utf8设置着;
3、进一步调查比较:
源:
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| 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)
导入端:
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
经比较发现,问题所在了!果然不出所料是两端字符集不统一造成的。
Array
1、修改被导入端:
vi /etc/my.cnf
default-character-set=latin1
:wq
2、导出与导入数据:
Array
Array
OK后,数据一切搞定。
当然,最好还是数据编码统一吧,文章:latin1转utf8方法(中英文版) Array
Array
1、开始打算用代码从原服务器中,生成CSV文件,再导入到另外的库中,但发现数据量多而且复杂。没办法分割出来正常的CSV字段,以失败告终。
2、从phpMyAdmin和命令行两种方式的导出/导入,都是乱码。再次失败。
Array
1、查查源库这边用的是什么编码,然后把它全部与导入端库的统一;
2、find / -name my.inf 结果发现源服务中没有配置文件!而在导入端服务器中有,default-character-set=utf8设置着;
3、进一步调查比较:
源:
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| 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)
导入端:
mysql> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
经比较发现,问题所在了!果然不出所料是两端字符集不统一造成的。
Array
1、修改被导入端:
vi /etc/my.cnf
default-character-set=latin1
:wq
2、导出与导入数据:
Array
Array
OK后,数据一切搞定。
当然,最好还是数据编码统一吧,文章:latin1转utf8方法(中英文版) Array
作者:@Everyday NetLog
地址:http://log.zhoz.com/read.php?324
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!