我应该设置什么 COLLATE 来使用所有可能的语言?
What COLLATE should i set to use all kind of possible languages?
我有一个名为 username
的专栏,我希望用户能够插入日语、罗马语、阿拉伯语、韩语以及所有可能的文本,包括特殊字符 [https://en.wiktionary.org/wiki/Index:All_languages] , 我应该在我的数据库和表上设置什么 COLLATE
?
我正在使用 utf_general_ci
,我是新手,所以我不知道这是否是最适合我需要的 COLLATE
。我需要选择正确的 COLLATE
来避免 sql 错误,因为我不会使用 preg_replace
或函数来替换特殊字符,我只会使用 prepared statement
来避免 SLQ通过数据库注入和保护。
如果您使用 MySQL 5.5.3 或更高版本,我建议使用 UTF-8 字符编码 utf8mb4_unicode_ci
。据我所知,它支持大多数(如果不是全部的话)语言,并且实现了用于排序和比较的 Unicode 标准。作为第二个选择,请查看 utf8mb4_general_ci
,它可能更快但也不太准确。
见this excellent SO post for (many) more details, or check out the official MySQL doc。
5.5.3以下,utf8_unicode_ci
是你的朋友
- 首选(MySQL8.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。
没有排序规则适合同时对所有 种语言进行排序。西班牙语、德语、土耳其语等都有不兼容的怪癖。上面的归类是 'best' 可用的通用归类。
utf8mb4 处理 Unicode 指定的所有字符(包括 Cherokee、Klingon、Cuneiform、Byzantine 等)
如果葡萄牙语是重点:
参见https://pt.whosebug.com/ and MySQL collation for Portugese。
研究 this for 8.0 or this for pre 8.0 以查看哪种 utf8/utf8mb4 排序规则最接近葡萄牙语排序 'correctly'。也许 utf8mb4_danish_ci
或 utf8mb4_de_pb_0900_ai_ci
是最好的。
(否则使用上面列出的 'choices'。)
我有一个名为 username
的专栏,我希望用户能够插入日语、罗马语、阿拉伯语、韩语以及所有可能的文本,包括特殊字符 [https://en.wiktionary.org/wiki/Index:All_languages] , 我应该在我的数据库和表上设置什么 COLLATE
?
我正在使用 utf_general_ci
,我是新手,所以我不知道这是否是最适合我需要的 COLLATE
。我需要选择正确的 COLLATE
来避免 sql 错误,因为我不会使用 preg_replace
或函数来替换特殊字符,我只会使用 prepared statement
来避免 SLQ通过数据库注入和保护。
如果您使用 MySQL 5.5.3 或更高版本,我建议使用 UTF-8 字符编码 utf8mb4_unicode_ci
。据我所知,它支持大多数(如果不是全部的话)语言,并且实现了用于排序和比较的 Unicode 标准。作为第二个选择,请查看 utf8mb4_general_ci
,它可能更快但也不太准确。
见this excellent SO post for (many) more details, or check out the official MySQL doc。
5.5.3以下,utf8_unicode_ci
是你的朋友
- 首选(MySQL8.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。
没有排序规则适合同时对所有 种语言进行排序。西班牙语、德语、土耳其语等都有不兼容的怪癖。上面的归类是 'best' 可用的通用归类。
utf8mb4 处理 Unicode 指定的所有字符(包括 Cherokee、Klingon、Cuneiform、Byzantine 等)
如果葡萄牙语是重点:
参见https://pt.whosebug.com/ and MySQL collation for Portugese。
研究 this for 8.0 or this for pre 8.0 以查看哪种 utf8/utf8mb4 排序规则最接近葡萄牙语排序 'correctly'。也许 utf8mb4_danish_ci
或 utf8mb4_de_pb_0900_ai_ci
是最好的。
(否则使用上面列出的 'choices'。)