使用二进制排序规则有什么效果?

kokeuurv  于 2021-06-17  发布在  Mysql
关注(0)|答案(4)|浏览(372)

在回答这个问题的时候,我对一些我没能找到充分答案的事情感到不确定。
使用二进制之间的实际区别是什么 utf8_bin 不区分大小写 utf8_general_ci 排序规则?
我可以看到三个:
两者的排序顺序不同; _bin 的排序顺序可能会将所有元音放在字母表的末尾,因为字节值是比较的(对吗?)
中仅区分大小写的搜索 _binA = Ä 平等 _bin 还有其他的区别或副作用需要注意吗?
参考文献:
9.1.2. mysql中的字符集和排序规则
9.1.7.6. mysql手册中的\u bin和二进制排序规则
9.1.7.7. 二元运算符
类似的问题没有解决这个问题:
utf-8:通用?箱子?unicode?

tzcvj98z

tzcvj98z1#

其他答案很好地解释了这些差异。
二进制排序规则在某些情况下很有用:
列包含十六进制数据,如密码哈希
你只对精确匹配感兴趣,而不是排序
对于只有[a-z0-9]个字符的标识符,您甚至可以使用它进行排序
由于某些原因,您将数字存储在char()或varchar列中(如电话)
邮政编码
UUID公司

在所有这些情况下,使用二进制排序规则可以节省(一点)cpu周期。

mrfwxfqh

mrfwxfqh2#

utf8_bin :按字符串中每个字符的二进制值比较字符串。 utf8_general_ci :使用通用语言规则和不区分大小写的比较来比较字符串。 utf8_general_cs :使用常规语言规则和区分大小写的比较来比较字符串。
例如,下面的表达式将使用 UTF8_general 排序规则,但不能与 utf8_bin 排序规则: Ä = A Ö = O Ü = Uutf8_general_ci 整理,他们也会回来 true 即使不是同样的情况。http://www.phpbuilder.com/board/showpost.php?s=2e642ac7dc5fceca2dbca1e2b9c424fd&p=10820221&postcount=2

uz75evzq

uz75evzq3#

使用utf8\u general\u ci时,匹配不考虑大小写和重音。当您需要对单词执行查询时,这可能是一件好事。
在utf8\u bin中,仅当字符串完全相同时才发生匹配。这样查询速度更快。

9gm1akwq

9gm1akwq4#

二进制排序规则将字符串与 strcmp() 在c语言中,如果字符不同(无论是大小写还是音调符号的不同)就可以了。它的缺点是排序顺序不自然。
非自然排序顺序的示例(如“二进制”中的排序顺序): A,B,a,b 在这种情况下,自然排序顺序是,例如: A,a,B,b (同一个字母的小写和大写字母排列在一起)
二进制排序的实际优势在于它的速度,因为字符串比较非常简单/快速。一般情况下,带有二进制的索引可能不会产生预期的排序结果,但是对于精确匹配,它们可能很有用。

相关问题