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

时间:2016-06-19 10:24:27

标签: java mysql utf-8 character-encoding collation

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

管理器应用程序是一个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

1 个答案:

答案 0 :(得分:4)

对于编码,应该使用CHARACTER SET utf8utf8mb4utf8涵盖了整个欧洲以及世界其他地区的大多数utf8mb4涵盖了所有世界语言。 utf8utf8mb4的一部分。

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

如果您不担心详细的语言差异,如果您拥有最新版本的MySQL,我建议您..._general_ci..._unicode_ci..._unicode_520_ci。这三个归类主要有以下不同之处:

  • general:仅测试一个字符进行比较。这不允许将ll视为单独的字母。这个轻微更快。
  • unicode:这是从较旧的Unicode标准派生而来的。这样可以“正确”处理“组合”重音。
  • unicode_520:这是基于更新的标准。表情符号被视为不同的。
  • unicode _...:更多版本的MySQL可能会出现更多内容。

您的应用程序无关紧要,但必须

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