我对MySQL归类及其编码感到困惑,人们通常使用以下三种归类之一:
我不了解的是何时需要使用这些排序规则中的每一个,例如,
这样的名称表
[id - name]
它将仅具有来自不同语言的名称字符,例如法语,德语,拉丁语。 。
。我将utf8mb_bin
归类使用还是使用utf8mb4_unicode_520_ci
归类,
另一方面,例如博客主题表:
[id - title - subject]
我是否将所有列排序规则都放在utf8mb4_unicode_520_ci
上或使用:
utf8mb_bin
for title
utf8mb4_unicode_520_ci
for subject
据我所知,utf8mb4_unicode_520_ci
中包含一些可以在博客主题中使用的表情,或者我只是忽略所有内容,而仅对所有内容使用utf8mb4_unicode_520_ci
?
但是总的来说,使用这些不同的归类有什么意义?以及它们如何影响我在SELECT
查询中的结果?
我想在berif中知道的是:
用于以下各项的排序规则:
答案 0 :(得分:3)
您混淆了编码和排序规则。
可用字符由编码(仅编码)定义。由于UTF-8是Unicode兼容的编码,因此您具有 all 个字符。 MySQL的特殊之处在于它的utf8
编码实际上并没有实现UTF-8,而只是实现了一个子集,因为它为每个字符分配了3个字节,并且(到目前为止)某些字符需要4个字节。 utf8mb4
就这样诞生了。
整理是一组规则,可告诉您WHERE foo = bar
和ORDER BY foo
的工作方式。您需要问自己:如果我搜索internet
,它是否应该与Internet
匹配?如果存储法语,德语和拉丁语单词,则很可能不需要二进制排序规则。理想情况下,您想要一个要使用的语言的确切规则,但是由于要混合使用多种语言,因此必须选择通用排序规则。阅读Difference between utf8mb4_unicode_ci and utf8mb4_unicode_520_ci collations后,您可以做出明智的决定。