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

Tol*_*leo 7 mysql collation character-encoding utf8mb4

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

  1. utf8mb_bin
  2. utf8mb4_general_ci
  3. utf8mb4_unicode_520_ci

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

像这样的名字的表

[id - name]
Run Code Online (Sandbox Code Playgroud)

它只会有来自不同语言(如法语、德语、拉丁语)的名称字符。. .

对于这样的表,我是使用 的整理utf8mb_bin还是坚持使用utf8mb4_unicode_520_ci

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

[id - title - subject]
Run Code Online (Sandbox Code Playgroud)

我是否将所有列整理utf8mb4_unicode_520_ci或使用:

utf8mb_bin 为了 title

utf8mb4_unicode_520_ci 为了 subject

因为据我所知,其中utf8mb4_unicode_520_ci有一些表情符号可用于博客主题,还是我只是忽略所有内容而仅使用utf8mb4_unicode_520_ci所有内容?

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

我想在贝里夫知道的是:

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

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

Álv*_*lez 8

你混淆了编码和整理。

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

整理是一组规则,告诉您如何WHERE foo = barORDER BY foo工作。你需要问自己:如果我搜索internet,它应该匹配Internet吗?如果您存储法语、德语和拉丁语单词,您很可能不需要二进制排序规则。理想情况下,您需要一个具有您将使用的语言的确切规则的规则,但是,由于您正在混合语言,因此您必须选择通用归类。您可以在阅读utf8mb4_unicode_ci 和 utf8mb4_unicode_520_ci 排序规则之间的差异后做出明智的决定。

  • 是的,例如您可以在保存电子邮件地址的列上使用 _bin 。通过这些电子邮件地址的唯一索引,您可以确保允许“müller@example.com”和“muller@example.com”或“rené@example.com”和“rene@example.com”作为有效的唯一索引条目。是的,如果您想实现搜索,那么在列上使用 unicode_ci 会很有帮助,如果您只搜索“rene”,该列将搜索返回“rené”和“renè”。 (3认同)
  • 那么这些排序规则在使用上到底有什么不同呢?为什么&**当**有人使用“Binary”而不是“unicode_ci”,反之亦然? (2认同)