需求其实很简单
开发写了一个程序,部署在A服务器上,mysql字符集是UTF-8(程序库和表,数据都是UTF-8).里面有一张表需要从B服务器获得。程序没有处理。需要手动导出导入。B服务器mysql 默认字符集为latin1(程序库和表,以及数据都是latin1)
#/usr/local/mysql/bin/mysqldump -uroot -p --default-character-set=latin1 Adatabase tblItems > Adatabase_tblItems.sql
# sed -i -e 's/latin1/utf8/g' Adatabase_tblItems.sql
# mysql -u root -p gmp 导入进去后是乱码。 后来把表结构和数据就拆分后再导入还是一样。 为了排查原因做了以下操作。 将两台服务器系统的字符集修改一样。 将SecureCRT字符集修改一样。 然后使用A 服务器使用set names utf8再source 还是不行 然后使用load data infile方式还是不行。 怀疑导入方式那里有问题,做了把正确的数据导出后再导入正常。说明导入数据正确 在B服务器查看load数据文件 #file tblItems # file tblItems 判断为传输过程编码格式改变 从sftp传输改为http传输后还是一样。 iconv转换文件无法转换。 后来用enca后解决。 问题的关键处在数据的编码方式。 和系统字符集。mysql客户端的字符集关系不大。 总结: 1、如果没有特殊的限制尽量让系统字符集一样。 2、如果没有特殊情况尽量让SecureCRT字符集修改一样 3、关于中文load前 可以查看一下文件的编码以及内容
tblItems_utf8: ISO-8859 text
tblItems_bak: Non-ISO extended-ASCII text