MySQL: 我应该设置哪种默认排序规则来涵盖所有欧洲字符?

MySQL: which default collation should I set to cover all european characters?

我注意到我的架构无法打印一些带有区域字符的字符串,例如 è、ù 和其他重音符号或符号。

管理器应用程序是一个 Java servlet,它没有这样的问题。它使用 jdbc 驱动程序。所以我认为原因可能是这个默认排序规则:utf8 - utf8_general_ci.

经过研究发现这些字符不能保存在utf8字节中。 我应该使用 utf8-mb4、utf-16、utf-32 还是其他?支持所有欧洲字符(无西里尔字符、阿拉伯字符和亚洲字符)的最小最佳字符是哪个?

例如,这个选择的答案建议 utf8mb4_unicode,但我不知道它是否真的是涵盖我需要的所有字符的最低限度。

What's the difference between utf8_general_ci and utf8_unicode_ci

编码应该使用CHARACTER SET utf8utf8mb4utf8 涵盖整个欧洲和 大部分 世界其他地区。 utf8mb4 涵盖了世界上所有的语言。 utf8utf8mb4.

的子集

可以根据您想要的顺序使用不同的COLLATIONs。例如,西班牙语(使用 utf8_spanish2_ci 或 utf8mb4_spanish2_ci)使用 ll 玩其他语言不玩的游戏。 utf8_latvian_ciĶ 视为不同于 K 的字符;其他人没有。

如果您不担心详细的语言差异,那么我推荐 ..._general_ci..._unicode_ci..._unicode_520_ci 如果您有最新版本的 MySQL。这三个 排序规则 主要区别如下:

  • general: 只测试一个字符进行比较。这不允许将 ll 视为单独的字母。这个 稍微 更快。
  • unicode:这是从旧的 Unicode 标准派生的。这处理 "combining" 口音 'correctly'.
  • unicode_520:这是基于较新的标准。表情符号被视为不同的。
  • unicode_...:MySQL.
  • 的更高版本中可能会有更多内容

您的应用程序做什么并不重要,但是,您必须

  • 告诉MySQL客户端有什么编码:?useUnicode=yes&characterEncoding=UTF-8
  • 在每列或table.
  • 上建立CHARACTER SET utf8(或utf8mb4)
  • 如果您使用的是网页,请在 meta 标签中设置 charset=UTF-8