我试图找出我应该用于各种类型数据的排序规则.我将存储的100%内容是用户提交的.
我的理解是我应该使用UTF-8通用CI(Case-Insensitive)而不是UTF-8 Binary.但是,我无法找到UTF-8 General CI和UTF-8 Unicode CI之间的区别.
在回答这个问题时,我对某些我无法找到足够答案的事情感到不确定.
使用二进制文件utf8_bin
和不区分大小写的utf8_general_ci
排序规则之间有什么实际区别?
我可以看到三个:
两者都有不同的排序顺序; _bin
排序顺序可能会将任何变音符号放在字母表的末尾,因为字节值会被比较(对吗?)
只有区分大小写的搜索 _bin
没有A = Ä
平等_bin
是否还有其他差异或副作用需要注意?
参考:
类似的问题没有解决这个问题:
我确信这里很多人都知道,处理德语元音变音和 UTF8 排序规则至少可以说是有问题的。a = \xc3\xa4
像, o = \xc3\xb6
,之类的东西u = \xc3\xbc
不仅能够影响结果的排序顺序,而且还能影响实际结果。这里有一个例子,清楚地展示了简单地尝试区分名词的单数和复数版本(Bademantel
- 单数,Badem\xc3\xa4ntel
- 复数)会如何出错。
CREATE TABLE keywords (\n id INT (11) PRIMARY KEY AUTO_INCREMENT,\n keyword VARCHAR (255) NOT NULL\n) ENGINE = MyISAM DEFAULT CHARACTER\nSET = utf8 COLLATE = utf8_unicode_ci;\n\nINSERT INTO keywords (keyword) VALUES (\'Bademantel\'), (\'Badem\xc3\xa4ntel\');\n\nSELECT * FROM keywords WHERE keyword LIKE (\'%Badem\xc3\xa4ntel%\');\n
Run Code Online (Sandbox Code Playgroud)\n\n结果应该是
\n\n+----+------------+\n| id | keyword |\n+----+------------+\n| 1 | Badem\xc3\xa4ntel |\n+----+------------+\n
Run Code Online (Sandbox Code Playgroud)\n\n但utf8_unicode_ci
输出是
+----+------------+\n| id | …
Run Code Online (Sandbox Code Playgroud)