【发布时间】:2014-08-20 02:10:17
【问题描述】:
相关问题:mysql select distinct letters, including extended latin characters
没有人费心回答最后一个问题,所以我正在创建一个新问题。
使用此表数据:http://pastebin.com/cH2DUzf3
并对其执行以下查询:
SELECT DISTINCT BINARY `letter` FROM `texts` ORDER BY `letter` ASC
产生几乎完美的结果,但有一个例外:字母 ū 在 u 之前。谁能解释一下?从逻辑上讲,字母u 是ū 的基本版本,顺序应该是u, ū。为什么不是这样?所有其他字母的顺序都正确。
第二个问题——对表执行如下语句:
DELETE FROM `texts` WHERE `letter` = 'ū'
同时删除letter 为u 的所有文本。为什么?
用拉脱维亚字母查询数据的同样问题:
SELECT * FROM `texts` WHERE `letter` = 'ā'
返回letter 为a,而不是ā 的结果。
编辑:好的,最后两个问题也可以通过将BINARY 放在letter 之前来解决。
【问题讨论】:
-
这两个字符的字符代码是什么?
-
我不知道。我在哪里可以检查?
-
您的数据在哪个 unicode 规范化形式中?为字段
letter设置了哪些排序顺序和字符集? -
@Deduplicator - 什么是
unicode normalization form???另外,检查一下 pastebin 怎么样?