我将要完成将数据库从Latin1转换为UTF-8的繁琐和棘手的任务。如何检测Latin1编码列中的UTF-8字符 - MySQL
在这一点上,我只是想检查我的表中存储了哪些数据,因为这将决定我应该使用什么方法来转换数据。
具体来说,我想检查在Latin1列中是否有UTF-8字符,那么最好的方法是什么?如果只有几行受到影响,那么我可以手动修复此问题。
选项1.执行MySQL转储并使用Perl搜索UTF-8字符?
选项2.使用MySQL CHAR_LENGTH查找具有多字节字符的行? 例如SELECT name FROM clients WHERE LENGTH(name) != CHAR_LENGTH(name);
这够了吗?
此刻我已将我的Mysql客户端编码切换为UTF-8。
根据定义,您不能在Latin1列中存储UTF-8数据。谨慎地为您的问题提供更多的背景信息? – deceze 2012-02-16 02:07:45
UTF-8多字节字符都大于128.但实际上有**无法**来确定字符的意图是什么:我认为你想要问的是“我可以检测到非ASCII字符一个Latin1编码列“。显然,由于字节序列0xF0 0x53意味着UTF-8和拉丁语1中的两个不同的东西,所以即使找到它,也不知道它是哪一个... – Borealid 2012-02-16 02:09:12
@deceze您可能无意中将UTF-8数据存储在LATIN1中列,因为LATIN1是一个8位字符集。它只是看起来像一个混乱的编码错误。 – tadman 2012-02-16 03:38:25