MySQL - UNHEX(HEX(UTF-8))问题

时间:2012-03-01 15:53:36

标签: mysql

我有一个包含UTF-8字符的数据库,这些数据显示不正确。我想我可以使用UNHEX(HEX(column)) != column条件来了解哪些字段中包含UTF-8字符。结果非常有趣:

id        | content | HEX(content) | UNHEX(HEX(content)) LIKE '%c299%' | UNHEX(HEX(content)) LIKE '%FFF%' | UNHEX(HEX(content))
49829102  |         | C299         | 0                                 | 0                                | c299
874625485 | FFF     | 464646       | 0                                 | 1                                | FFF

这怎么可能,而且,我怎样才能找到包含这个字符的行?

- 编辑(2):由于我的编辑已被删除(可能是当JamWaffles正在修复我漂亮的数据表时),这里又是:当编辑器删除UTF-8字符时,第一行的内容是\ uc299 (如果那不清楚;))

- 编辑(3):我已经弄清楚问题是什么 - UNHEX(HEX(content))的实际表示是错误的 - 显示我必须执行以下操作的多字节字符:SELECT UNHEX(SUBSTR(HEX(content),1)))。可悲的是,UNHEX(C299)不能作为UNHEX(C2)+ UNHEX(99)工作,所以它又回到了绘图板。

1 个答案:

答案 0 :(得分:1)

有两种方法可以确定字符串是否包含UTF-8特定字符。第一个是查看字符串是否具有ASCII字符集之外的值:

SELECT _utf8 'amńbcd' REGEXP '[^[.NUL.]-[.DEL.]]';

第二个是比较二进制和字符长度:

SELECT LENGTH(_utf8 'amńbcd') <> CHAR_LENGTH(_utf8 'amńbcd');

两者都返回TRUE

请参阅http://sqlfiddle.com/#!2/d41d8/9811