星期四, 五月 17, 2007

a MySQL charset problem

有一个 dump1.sql 文件,其中中文字符集使用的是 UTF-8,但 CREATE 语句的 DEFAULT CHARSET=GBK,所以导入时是会出问题的:
sh$ mysql -u root test "<"dump1.sql
ERROR 1062 (23000) at line 5653: Duplicate entry '????' for key 2
进入数据库可以看到中文字段都是?,所以中文字数相同就会重复。要解决这个问题,首先需要对文件转码,然后使用正确的参数导入。

当然数据库首先必须支持 GBK 字符集,可以用 SHOW CHARACTER SET 查看所有支持的字符集,如果不支持,可以在编译的 ./configure 增加 --with-extra-charsets=gbk 参数。

然后如下操作:
转码:
sh$ iconv -f UTF-8 -t GBK -o dump2.sql dump1.sql
导入:
sh$ mysql -u root -p --default-character-set=gbk test "<"dump2.sql

没有评论: