我有一个名为 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.0或 this for pre 8.0查看哪种 utf8/utf8mb4 排序规则最接近“正确”排序葡萄牙语。也许 utf8mb4_danish_ci
或 utf8mb4_de_pb_0900_ai_ci
是最好的。
(否则使用上面列出的“选择”。)
关于mysql - 我应该设置什么 COLLATE 来使用所有可能的语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54043857/