我们将从包含UTF-8编码数据的.sql脚本中导入数据到MySQL数据库:
mysql ... database_name < script.sql
稍后,这些数据将显示在我们的web应用程序(连接到该数据库)的页面上,同样显示在UTF-8中。但是在这个过程中的某个地方出了问题,因为非ascii字符显示不正确。
我们解决这个问题的第一次尝试是将mysql列编码更改为UTF-8 (例如,如这里所描述的):
alter table wp_posts change post_content post_content LONGBLOB;`
alter table wp_posts change post_content post_content LONGTEXT CHARACTER SET utf8;但没什么用。
最后,我们通过使用附加的命令行标志从.sql脚本导入数据来解决这个问题,我认为这迫使mysql将来自.sql脚本的数据作为UTF-8来处理。
mysql ... --default-character-set=utf8 database_name < script.sql
这很有帮助,但后来我们意识到,这一次我们忘记了将列编码更改为utf8 --即使utf-8编码的数据在数据库中流动(从sql脚本到应用程序),它也被设置为latin1。
如果从数据库获取的数据被正确显示,即使数据库字符集设置不正确,那么为什么我还要费心设置正确的数据库编码呢?
我特别想知道:
希望有人帮我把事情弄清楚..。
发布于 2012-04-24 12:00:49
在我看来,最大的原因是它破坏了您的DB一致性。
现在请回答你们的问题:
ORDER BY时,排序规则将考虑到列的编码,因为某些内部转换适用于不同列的不同编码。如果您试图比较字符串,那么编码信息在这里也是必不可少的。编码是与排序规则结合在一起的,尽管大多数人并不经常使用这个特性。考虑到您已经通过--default-character-set=utf8成功地将数据加载到数据库中,那么您的环境就有了一些问题,我建议它不是UTF8设置。
我认为今天的最佳做法是:
这样,错误的字段就会少一些。
https://stackoverflow.com/questions/10108263
复制相似问题