何时使用utf8mb4(bin,general_ci,unicode_520_ci)?

时间:2018-07-19 16:57:53

标签: mysql character-encoding collation utf8mb4

我对MySQL归类及其编码感到困惑,人们通常使用以下三种归类之一:

  1. utf8mb_bin
  2. utf8mb4_general_ci
  3. utf8mb4_unicode_520_ci

我不了解的是何时需要使用这些排序规则中的每一个,例如,

这样的名称表

[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中知道的是:

用于以下各项的排序规则:

  1. 名称
  2. 标题
  3. 主题
  4. 电子邮件
  5. bios
  6. 消息
  7. 用户名

1 个答案:

答案 0 :(得分:3)

您混淆了编码和排序规则。

可用字符由编码(仅编码)定义。由于UTF-8是Unicode兼容的编码,因此您具有 all 个字符。 MySQL的特殊之处在于它的utf8编码实际上并没有实现UTF-8,而只是实现了一个子集,因为它为每个字符分配了3个字节,并且(到目前为止)某些字符需要4个字节。 utf8mb4就这样诞生了。

整理是一组规则,可告诉您WHERE foo = barORDER BY foo的工作方式。您需要问自己:如果我搜索internet,它是否应该与Internet匹配?如果存储法语,德语和拉丁语单词,则很可能不需要二进制排序规则。理想情况下,您想要一个要使用的语言的确切规则,但是由于要混合使用多种语言,因此必须选择通用排序规则。阅读Difference between utf8mb4_unicode_ci and utf8mb4_unicode_520_ci collations后,您可以做出明智的决定。