mysql - 我应该设置什么 COLLATE 来使用所有可能的语言?

标签 mysql sql database collation

我有一个名为 username 的列,我希望用户能够插入日语、罗马语、阿拉伯语、韩语以及所有可能的文本,包括特殊字符 [ https://en.wiktionary.org/wiki/Index:All_languages] ,我应该在我的数据库和表上设置什么COLLATE

我正在使用 utf_general_ci,我是新手,所以我不知道这是否是满足我需求的最佳 COLLATE。我需要选择正确的 COLLATE 以避免 sql 错误,因为我不会使用 preg_replace 或替换特殊字符的函数,我只会使用 prepared statement 避免 SLQ 注入(inject)和数据库保护。

最佳答案

  • 首选(MySQL 8.0):utf8mb4_0900_ai_ci
  • 第二选择(自 5.6 起):utf8mb4_unicode_520_ci
  • 第三选择(5.5+):utf8mb4_unicode_ci
  • 5.5之前,你不能处理所有的中文,也不能处理Emoji:utf8_unicode_ci

数字指的是 Unicode 标准 9.0、5.20 和(无数字)4.0。

没有排序规则适契约(Contract)时对所有 语言进行排序。西类牙语、德语、土耳其语等都有不兼容的怪癖。上面的归类是可用的“最佳”通用归类。

utf8mb4 处理 Unicode 指定的所有字符(包括 Cherokee、Klingon、Cuneiform、Byzantine 等)

如果葡萄牙语是重点:

参见 https://pt.stackoverflow.com/MySQL collation for Portugese .

研究this for 8.0this for pre 8.0查看哪种 utf8/utf8mb4 排序规则最接近“正确”排序葡萄牙语。也许 utf8mb4_danish_ciutf8mb4_de_pb_0900_ai_ci 是最好的。

(否则使用上面列出的“选择”。)

关于mysql - 我应该设置什么 COLLATE 来使用所有可能的语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54043857/

相关文章:

mysql - 如何执行简单的连接

sql - 数据库sql替换语句更新记录

php - DateTime 数据类型、MySQL 和 Yii

MYSQL 一个字段的总和取决于其他字段的值

sql - Oracle SQL "SQL command not properly ended"中的“限制”子句

sql - 从 now() 函数中减去小时数

sql - AST 与后缀算法

Android 并发数据库操作—— "database is locked"

mysql - 如何在 phpmyadmin 3.3.7 中定义表关系?

mysql - 如何将两个表的结果合并到一个输出文件中?