我注意到我的架构无法打印一些带有区域字符的字符串,例如è,ù和其他重音符号或符号。
管理器应用程序是一个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
答案 0 :(得分:4)
对于编码,应该使用CHARACTER SET utf8
或utf8mb4
。 utf8
涵盖了整个欧洲以及世界其他地区的大多数。 utf8mb4
涵盖了所有世界语言。 utf8
是utf8mb4
的一部分。
根据您想要的排序,可以使用不同的COLLATIONs
。例如,西班牙语(使用utf8_spanish2_ci或utf8mb4_spanish2_ci)使用ll
来玩其他语言不能玩的游戏。 utf8_latvian_ci
将Ķ
视为与K
不同的字符;其他人没有。
如果您不担心详细的语言差异,如果您拥有最新版本的MySQL,我建议您..._general_ci
或..._unicode_ci
或..._unicode_520_ci
。这三个归类主要有以下不同之处:
ll
视为单独的字母。这个轻微更快。您的应用程序无关紧要,但必须
?useUnicode=yes&characterEncoding=UTF-8
CHARACTER SET utf8
(或utf8mb4)。charset=UTF-8
标记中设置meta
。