【发布时间】:2015-04-12 08:15:03
【问题描述】:
我有一张桌子,上面有一些来自中世纪书籍的单词,还有一些现代 latin1 字母表中不再存在的重音字母。我可以用 UTF-8 组合字符轻松表示这些字母。例如,要创建一个带有波浪号的“J”,我使用 UTF-8 序列 \u004A+\u0303 并且 J 变成带有波浪号的重音符号。
表格使用utf8编码,字段排序为utf8_unicode_ci。
我的问题如下:如果我尝试选择整个字符串,我会收到正确的答案。如果我尝试使用“LIKE”进行选择,我会收到错误的答案。
例如:
mysql> select word, hex(word) from oldword where word = 'hua';
+--------+--------------+
| word | hex(word) |
+--------+--------------+
| hũa | 6875CC8361 |
| huã | 6875C3A3 |
| hua | 687561 |
| hũã | 6875CC83C3A3 |
+--------+--------------+
4 rows in set (0,04 sec)
mysql> select word, hex(word) from oldword where word like 'hua';
+-------+------------+
| word | hex(word) |
+-------+------------+
| huã | 6875C3A3 |
| hua | 687561 |
+-------+------------+
2 rows in set (0,04 sec)
我不想只搜索整个单词。我想搜索以某个子字符串开头的单词。最终搜索到的词是整个词。
如何使用 like 选择部分字符串并匹配所有字符串?
我尝试使用 this information 创建自定义排序规则,但服务器变得不稳定,只有经过大量试验和错误后,我才能再次恢复到 utf8_unicode_ci 排序规则,服务器恢复正常状态。
编辑:此站点存在问题,某些字符无法正确显示。请查看这些粘贴箱的结果:
【问题讨论】:
-
如果你尝试会发生什么:like 'hua%'
-
我编辑了这个问题,因为 Stackoverflow 删除了一些重音字符。请看那个pastebin。回答你的问题,它就在这个 pastebin pastebin.com/P6cZVHYE
-
请在bugs.mysql.com举报
-
@RickJames 你认为这是一个错误吗?起初我以为是,但现在我认为这不是错误,正如我的回答和 MarcusAdams 的回答中所述。
-
可以通过手册
LIKE部分中的注释解决“错误”,解释如何实现大小写折叠,但组合字符被视为单独的。我们俩;所以我声称它应该采取一些行动。
标签: mysql unicode utf-8 collation