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

3

我有一个包含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)那样工作,所以又回到了原点。

请发布您表的SHOW CREATE TABLE结果,以便我们查看模式。此外,请发布您运行以获取这些结果的完整查询。 - Ike Walker
@Ike Walker 确定:表格:CREATE TABLE \table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `content` longtext NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=874625486 DEFAULT CHARSET=utf8`查询语句:SELECT id, content, HEX( content ) , UNHEX( HEX( content ) ) LIKE '%c299%', UNHEX( HEX( content ) ) LIKE '%FFF%', UNHEX( HEX( content ) ) FROM \table`` - eithed
1个回答

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接