【发布时间】:2012-03-07 10:48:01
【问题描述】:
我即将承担将数据库从 Latin1 转换为 UTF-8 的繁琐且充满难题的任务。
此时我只想检查我的表中存储了哪些类型的数据,因为这将决定我应该使用哪种方法来转换数据。
具体来说,我想检查 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。
【问题讨论】:
-
根据定义,您不能将 UTF-8 数据存储在 Latin1 列中。愿意为您的问题提供更多背景信息吗?
-
@deceze 您可能会无意中将 UTF-8 数据存储在 LATIN1 列中,因为 LATIN1 是 8 位字符集。它最终看起来像错误编码的一团糟。
-
@Borealid 0xF0 0x53 不是有效的 UTF8 序列,这就是为什么这在一定程度上是可行的。
-
@triplee 诅咒,应该选择 30,000 多个模棱两可的两字节序列之一!但我想你明白我的意思。有一些字符不能是 UTF-8,但是很多 latin1 二字符序列也是有效的 UTF-8 二字节字符。
-
@tripleee 还有字节序列 0xC2A0,在 UTF-8 中是一个不间断空格,在 latin1 中是一个后跟一个不间断空格?奇妙的消失角色!
标签: mysql utf-8 character-encoding latin1