MySQL-对于所有世界语言,我必须使用utf8_general_ci或utf8_unicode_ci或其他任何排序规则?

我们开发android应用.该应用程序接受来自用户的文本并上传到服务器(mysql).然后,其他用户将阅读此文本.

在测试时,我发现“ Hindi”(印度)语言在列中插入为“ ?????”. ‘.然后,在SO搜索之后,我将排序规则更改为utf8_general_ci.

我是整理新手.我想让用户以世界上任何一种语言输入文本,而其他人则可以访问.我该怎么办.准确性是必须的.

但是我看到一条评论,其中有人说:“永远不要使用utf8_general_ci.这根本行不通.这回溯到50年前的ASCII信息存储糟糕的过去.没有Unicode区分大小写的匹配就离不开例如,“Σίσυφος”中包含三个不同的sigma;或者“TSCHüẞ”的小写字母是“tschüβ”,而“tschüβ”的大写字母是“TSCHÜSS”.否则您可能会很快.因此,您必须使用utf8_unicode_ci,因为如果您不关心正确性,那么使其无限快速变得微不足道.”

解决方法:

您的问题标题是有关归类的问题,但在正文中您说:

I want to let user input text in any language in the world and others get the access.

因此,我假设这就是您的要求.需要澄清的是,归类会影响MySQL如何相互比较字符串,但这并不是最终打开存储Unicode字符的可能性.

为了存储,您需要确保正确定义了字符集. MySQL允许您在列级别指定字符集和排序规则值,但也允许您在表和数据库级别指定默认值.通常,我建议在数据库和表级别上设置默认值,并在定义列时让MySQL处理其余部分.请注意,如果已经存在带有不同字符集的列,则需要研究对其进行更改.根据您用来与MySQL通信的内容,您可能还需要指定一个字符编码以用于连接.

请注意,utf8mb4是所使用字符集的绝对必需,请勿仅使用utf8.您将无法存储使用UTF-8占用4个字节的unicode字符,例如emoji字符.

至于要使用的排序规则,我确实没有建议,因为它取决于您的目标是速度还是准确性.有大量的信息可以涵盖其他答案中的主题.

上一篇:网络知识梳理(第二节)


下一篇:mysql-Varchar为UTF-8吗?