使用iconv转换mysqldump-ed数据库

时间:2015-10-03 07:28:54

标签: mysql utf-8 iconv

尝试快速将latin1 mysql数据库转换为utf8,我尝试了以下内容:

  1. 转储数据库
  2. 在生成的文件
  3. 上运行iconv -f latin1 -t utf8
  4. 导入使用UTF8默认编码的新数据库
  5. 这个主要是除了...... 一些字母转换错误之外(例如:大写重音' U'变成一些乱码序列,以a开头问号)。正在进行一些转换(查询结果显示latin1字节所在的两个字节序列)并且te latin1版本正常。虽然到目前为止我一直没有系统地隔离问题(深夜;在截止日期之前;等等),但问题的怪异性使我丧命:为什么它会在某些字母上失败而不是全部?客户端连接?列charset?为什么我没有得到任何诊断?我受阻了。

    当然,我可以努力隔离问题及其细节,但是想到也许有人已经碰到了这个并且可以通过这个(可以说是相当差的)描述来识别它。

    干杯

2 个答案:

答案 0 :(得分:0)

数据可能已经存储为latin1但是您用来转储数据的客户端可能已经将其导出为UTF-8。

在合适的文本编辑器(Notepad ++,TextWrangler,Atom)中打开转储文件,并检查哪种编码允许正确显示所有字符。

然后,当重新导入数据时,请确保您的客户端设置为在导入上使用UTF-8。

答案 1 :(得分:0)

不要使用iconv,这只会让作品变得混乱。

假设一个表被声明为latin1并且正确包含latin1个字节,但您想将其更改为utf8,请执行以下操作:

ALTER TABLE tbl CONVERT TO CHARACTER SET utf8;

也可以通过转储和重新加载来完成;它涉及对参数的一些改变。对不起,我没有详细信息。