回答此问题时,我开始对一个问题感到不确定,并没有找到足够的答案。
utf8_bin
和不区分大小写的utf8_general_ci
排序规则之间有哪些实际差异?
我能看到三个方面:
两者具有不同的排序顺序;
_bin
的排序顺序可能会将任何umlauts放在字母表的末尾,因为比较的是字节值(对吧?)只有对大小写敏感的搜索在
_bin
中_bin
中没有A = Ä
的相等性
还有其他需要注意的差异或副作用吗?
参考:
类似但并未解决问题的问题:
回答此问题时,我开始对一个问题感到不确定,并没有找到足够的答案。
utf8_bin
和不区分大小写的utf8_general_ci
排序规则之间有哪些实际差异?
我能看到三个方面:
两者具有不同的排序顺序; _bin
的排序顺序可能会将任何umlauts放在字母表的末尾,因为比较的是字节值(对吧?)
只有对大小写敏感的搜索在_bin
中
_bin
中没有A = Ä
的相等性
还有其他需要注意的差异或副作用吗?
参考:
类似但并未解决问题的问题:
二进制排序法会完全按照C语言中的strcmp()
方法比较您的字符串,如果字符不同(无论是大小写差异还是音标差异),则会将其视为不同。它的缺点是排序顺序不自然。
“二进制”排序顺序的示例: A,B,a,b
在自然排序顺序中,例如:A,a,B,b
(相同字母的大小写变体会排在一起)
二进制排序法的实际优势在于速度快,因为字符串比较非常简单/快速。在一般情况下,使用二进制索引可能无法产生期望的排序结果,但对于精确匹配,它们可能是有用的。
utf8_bin
: 比较字符串时会通过每个字符的二进制值进行比对。
utf8_general_ci
: 使用一般语言规则,并且忽略大小写来比较字符串。
utf8_general_cs
: 使用一般语言规则,但区分大小写来比较字符串。
例如,以下内容无论使用哪种 UTF8_general
编码都会返回 true,但不适用于 utf8_bin
编码:
Ä = A
Ö = O
Ü = U
而使用 utf8_general_ci
编码时,即使大小写不同,它们也将返回 true。
http://www.phpbuilder.com/board/showpost.php?s=2e642ac7dc5fceca2dbca1e2b9c424fd&p=10820221&postcount=2
使用utf8_general_ci,匹配不区分大小写和重音符号。当您需要对单词执行查询时,这可能是一件好事。
在utf8_bin中,仅当字符串严格相同时才匹配。这种方式的查询速度更快。