在回答this question时,我对某些我无法找到足够答案的事情感到不确定。
使用二进制utf8_bin
和不区分大小写的utf8_general_ci
排序规则之间有什么实际区别?
我可以看到三个:
两者都有不同的排序顺序; _bin
的排序顺序可能会将任何变音符号放在字母表的末尾,因为字节值会被比较(对吗?)
仅_bin
A = Ä
_bin
次平等
醇>
是否还有其他差异或副作用需要注意?
参考:
未解决此问题的类似问题:
答案 0 :(得分:50)
二进制排序规则将您的字符串与C中的strcmp()进行比较,如果字符不同(无论是大小写还是变音符号差异)。它的缺点是排序顺序不自然。
非自然排序顺序的一个例子(如“二进制”中所示):A,B,a,b 在这种情况下,自然排序顺序例如:A,a,B,b(撒字母的小和大写变体彼此相邻排序)
二进制整理的实际优势在于其速度,因为字符串比较非常简单/快速。在一般情况下,带二进制的索引可能不会产生排序的预期结果,但是对于完全匹配,它们可能很有用。
答案 1 :(得分:12)
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
答案 2 :(得分:1)
其他答案很好地解释了这些差异。
二进制排序规则在某些情况下很有用:
在所有这些情况下,您可以使用二进制排序规则保存(一点点)cpu周期。
答案 3 :(得分:0)
使用 utf8_general_ci ,匹配会在不考虑大小写和重音的情况下发生。当你需要对单词进行查询时,这可能是一件好事。
在 utf8_bin 中,匹配仅在字符串严格相同时发生。查询速度更快。