提问者:小点点

使用iconv转换mysqldump-ed数据库


尝试将latin1 mysql DB快速转换为utf8,我尝试了以下操作:

  1. 转储数据库
  2. 对结果文件运行iconv-f latin1-t utf8
  3. 导入到使用UTF8默认编码的新数据库

除了...有些字母转换错误(例如:大写重音的“U”变成了以问号开头的乱码序列)。正在进行一些转换(od a查询结果显示了一个两字节序列,其中latin1字节是),并且te latin1版本是正确的。尽管到目前为止,我一直没有系统地将问题隔离开来(深夜;在截止日期之前;等等),但问题的怪异让我心碎:为什么它会在一些信件上失败,而不是全部?客户端连接?列字符集?为什么我没有得到任何诊断?我被困住了。

当然,我可以把这个问题和它的细节分离出来,但是我想也许有人已经遇到了这个问题,并且可以通过这个(诚然是相当糟糕的)描述来识别它。

干杯


共2个答案

匿名用户

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

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

然后在将数据导入回来时,确保您的客户机设置为在导入时使用UTF-8。

匿名用户

不要用iconv,它只会把工作搞得一团糟。

假设一个表被声明为latin1并且正确地包含latin1字节,但您希望将其更改为utf8,那么对该表执行以下操作:

ALTER TABLE tbl CONVERT TO CHARACTER SET utf8;

也可以用转储和重新加载来完成;它涉及对参数的一些更改。抱歉,我不知道细节。