使用二进制排序规则有什么影响?

Pek*_*ica 45 mysql collation

在回答这个问题时,我对某些我无法找到足够答案的事情感到不确定.

使用二进制文件utf8_bin和不区分大小写的utf8_general_ci排序规则之间有什么实际区别?

我可以看到三个:

  1. 两者都有不同的排序顺序; _bin排序顺序可能会将任何变音符号放在字母表的末尾,因为字节值会被比较(对吗?)

  2. 只有区分大小写的搜索 _bin

  3. 没有A = Ä平等_bin

是否还有其他差异或副作用需要注意?

参考:

类似的问题没有解决这个问题:

Vla*_*oub 51

二进制排序规则将你的字符串与C中的strcmp()进行比较,如果字符不同(无论是大小写还是变音符号差异).它的缺点是排序顺序不自然.

非自然排序顺序的一个例子(如"二进制"中所示):A,B,a,b自然排序顺序在这种情况下例如:A,a,B,b(撒字母的小和大写变体被排序彼此相邻)

二进制整理的实际优点是它的速度,因为字符串比较非常简单/快速.在一般情况下,具有二进制的索引可能不会产生排序的预期结果,但是对于完全匹配,它们可能是有用的.

  • 上面的小修正..它*几乎*作为strcmp()工作,但不完全是100%.根据SQL标准,需要比较具有不同长度的字符串,就好像较短的字符串用空格字符(0x20)填充直到较大字符串的长度.在大多数情况下,这将表现得像strcmp(),但在涉及字节<0x20(空格)的退化情况下,它不会.例如'a\t'('a'后跟TAB)小于'a'(后跟空格),因此'a\t'<'a'.MariaDB 10.2引入了NOPAD排序规则,它们完全符合strcmp()行为,(https://jira.mariadb.org/browse/MDEV-9711) (2认同)

Hal*_*ter 14

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

  • *_cs 比 *_ci 快吗?对于英语/ASCII 字符串 (2认同)