什么时候使用 utf8mb4 (bin, general_ci, unicode_520_ci)?

When to use utf8mb4 (bin, general_ci, unicode_520_ci)?

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

  1. utf8mb_bin
  2. utf8mb4_general_ci
  3. utf8mb4_unicode_520_ci

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

A table 这样的名字

[id - name]

它只会包含来自不同语言的名称字符,例如 法语、德语、拉丁语。 . .

对于这样的 table 我是使用 utf8mb_bin 的排序规则还是坚持使用 utf8mb4_unicode_520_ci,

另一方面,A table 例如博客的主题:

[id - title - subject]

我是将所有列排序规则设为 utf8mb4_unicode_520_ci 还是使用:

utf8mb_bin 对于 title

utf8mb4_unicode_520_ci 对于 subject

因为据我了解,utf8mb4_unicode_520_ci 中有一些表情可以用于博客主题,或者我只是忽略所有内容而只使用 utf8mb4_unicode_520_ci

但总的来说,使用这些不同的排序规则有什么意义?它们如何影响我在 SELECT 查询中的结果?

我想在 berif 中知道的是:

每个要使用的排序规则:

  1. 名字
  2. 头衔
  3. 科目
  4. 电子邮件
  5. BIOS
  6. 消息
  7. 用户名

您混淆了编码和整理。

可用字符由编码定义(且仅由编码定义)。由于 UTF-8 是与 Unicode 兼容的编码,因此您有 all 个字符。 MySQL 的特点是它的 utf8 编码并没有真正实现 UTF-8,而只是一个子集,因为它为每个字符分配 3 个字节,并且(截至今天)一些字符需要 4 个字节。于是utf8mb4诞生了。

排序规则是一组规则,告诉您 WHERE foo = barORDER BY foo 是如何工作的。你需要问问自己:如果我搜索 internet,它应该匹配 Internet 吗?如果您存储法语、德语和拉丁语单词,您很可能不需要二进制排序规则。理想情况下,您需要一个具有您将要使用的语言的确切规则的规则,但是由于您正在混合使用多种语言,因此您将不得不选择通用排序规则。阅读 .

后,您可以做出明智的决定