MySQL没有正确存储外来字符

时间:2010-05-23 03:22:53

标签: .net mysql utf-8 cjk

使用SQLite,这很好用。但是,当我切换到MySQL时,而不是クイン,我得到???。该列是TEXT或有时是VARCHAR(255)(在这种情况下我相信它的VARCHAR(255))。

如何让MySQL正确保存这些字符?

2 个答案:

答案 0 :(得分:6)

表/列字符集需要设置为支持UTF8等多字节的版本。

您可以通过执行

来告诉当前表字符集
mysql> SHOW CREATE TABLE tbl_Name;

它可能没有显示任何情况,它使用你my.cnf中定义的默认值

要更改表格上的字符集:

mysql> ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

如果您有大量数据或无法删除数据并重新开始,我不建议这样做。转换需要首先删除不良数据。

我仔细阅读了这篇文章,它似乎是深入的,而且我记得我自己的战斗与这个非常准确。 http://www.oreillynet.com/onlamp/blog/2006/01/turning_mysql_data_in_latin1_t.html

此外,要以UTF-8创建新表,请将 CHARACTER SET utf8 COLLATE utf8_general_ci 附加到 CREATE TABLE 语句的末尾

答案 1 :(得分:2)

确认您在连接字符串中指定了“charset = utf8”。例如

connectionString="Server=myServerHost;charset=UTF8;Database=myDatabase;Uid=root;Pwd=password;"

Character Sets and Collations in General中所述 MySQL可以这样做:

  • 使用各种字符集存储字符串
  • 使用各种排序规则比较字符串
  • 在同一服务器,同一数据库甚至同一个表中混合使用不同字符集或排序规则的字符串
  • 允许在任何级别指定字符集和整理