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

时间:2016-03-04 12:52:24

标签: mysql unicode utf-8 collation

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

在测试中我发现“印地语”(印度语)语言被插入列中“????? ”。然后在SO搜索之后,我将校对更改为utf8_general_ci。

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

但是我看到一个评论,其中一个人说:“你永远不应该使用utf8_general_ci。它根本不起作用。这是对五十年前ASCII stooopeeedity过去的糟糕历史的回归.UVC不区分大小写的匹配不能没有来自UCD的折叠地图。例如,“Σίσυφος”中有三个不同的sigma;或者“TSCHüẞ”的小写字母是“tschüβ”,但“tschüβ”的大写字母是“TSCHÜSS”。你可以是正确的,或者你可以快速。所以你必须使用utf8_unicode_ci,因为如果你不关心正确性,那么让它无限快速是微不足道的。“

1 个答案:

答案 0 :(得分:3)

你的问题标题是关于整理的问题,但在你说的身体中:

  

我想让用户输入世界上任何语言的文本,其他人可以访问。

所以,我假设那是你特意追求的。为了澄清,整理会影响MySQL如何相互比较字符串,但最终却无法存储unicode字符。

对于存储,您需要确保正确定义字符集。 MySQL允许您在列级别指定字符集和排序规则值,但它还允许您指定表和数据库级别的默认值。一般来说,我建议在数据库和表级别设置默认值,让MySQL在定义列时处理其余部分。请注意,如果已存在具有不同字符集的列,则您需要调查更改它。根据您用于与MySQL通信的内容,您可能还需要指定用于连接的字符编码。

请注意utf8mb4是使用的字符集的绝对必需项,仅使用utf8 ..您将无法存储消耗的unicode字符带有UTF-8的4个字节,例如表情符号字符。

至于使用的整理,我真的没有推荐,因为它取决于你的目标,速度或准确性。在其他答案中有大量的信息涵盖了该主题。