Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我应该设置什么样的校对来使用各种可能的语言?_Mysql_Sql_Database_Collation - Fatal编程技术网

Mysql 我应该设置什么样的校对来使用各种可能的语言?

Mysql 我应该设置什么样的校对来使用各种可能的语言?,mysql,sql,database,collation,Mysql,Sql,Database,Collation,我有一个名为username的列,我希望用户能够插入日文、罗马文、阿拉伯文、韩文以及所有可能的文本,包括特殊字符[,我应该在数据库和表上设置什么COLLATE 我正在使用utf\u general\u ci,我是新来的,所以我不知道这是否是最适合我需要的COLLATE。我需要选择正确的COLLATE以避免sql错误,因为我不会使用preg\u replace或函数来替换特殊字符,我只会使用prepared statement来避免SLQ注入如果您使用的是MySQL 5.5.3或更高版本,我建议您

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


我正在使用
utf\u general\u ci
,我是新来的,所以我不知道这是否是最适合我需要的
COLLATE
。我需要选择正确的
COLLATE
以避免sql错误,因为我不会使用
preg\u replace
或函数来替换特殊字符,我只会使用
prepared statement
来避免SLQ注入如果您使用的是MySQL 5.5.3或更高版本,我建议您使用UTF-8字符编码
utf8mb4\u unicode\u ci
。它支持大多数语言(如果不是所有语言的话),并且实现了用于排序和比较的unicode标准。作为第二种选择,请查看一下
utf8mb4\u general\u ci
,这可能会更快,但更安全也不太准确

有关更多详细信息,请参阅,或查看

在5.5.3下面,
utf8\u unicode\u ci
是你的朋友。

  • 首选(MySQL 8.0):
    utf8mb4\u 0900\u ai\u ci
  • 第二选择(从5.6开始):
    utf8mb4\u unicode\u 520\u ci
  • 第三种选择(5.5+):
    utf8mb4\u unicode\u ci
  • 在5.5之前,您无法处理所有的中文和表情符号:
    utf8\u unicode\u ci
数字参考Unicode标准9.0、5.20和(无数字)4.0

没有一种排序规则适合于同时对所有语言进行排序。西班牙语、德语、土耳其语等都有一些不兼容的怪癖。上面的排序规则是可用的“最佳”通用排序规则

utf8mb4处理Unicode指定的所有字符(包括切诺基、克林贡、楔形文字、拜占庭等)

如果重点是葡萄牙语:

见和

研究或查看哪个utf8/utf8mb4排序规则最接近葡萄牙语“正确”排序。也许
utf8mb4\u danish\u ci
utf8mb4\u de\u pb\u 0900\u ai\u ci
是最好的


(否则请按照上面列出的“选项”进行操作。)

要在MySQL中使用实际的UTF-8,您可以选择在服务器中运行
显示排序规则(如“utf8mb4%”)时显示的任何排序规则。
但一个是字符集,另一个是排序规则。为此,您需要找出首选的排序规则,以及字符比较和排序的高级规则。有趣的是,我将搜索一个关于
utf8mb4\u 0900\u ai\u ci
。我的mysql版本是
10.1.37
。MariaDB 10.1近似于mysql 5.6,所以对你来说最好的是
utf8mb4\u unicode\u 520\u ci
(我刚刚检查了10.1.33。)我有两个问题,1-如何为MySQL版本选择最好的
COLLATE
?我做了一些研究,我将使用
utf8mb4\u unicode\u 520\u ci
,我将看看它是否好。2-我应该添加
setlocale(LC\u TIME,'pt\u BR','pt\u BR.utf-8','pt\u BR.utf-8','葡萄牙语');//ppl说我应该在我的文件上使用我国家的语言
?我认为替换特殊字符可能会有帮助,但我不确定,我几天前刚刚遇到这个函数,实际上我问是否建议使用
setLocale()
,我的意思是,如果有一个单词是
校对
无法处理的,它会在屏幕上打印出一个sql错误,所以为了避免这个错误
setLocale()
可能会有所帮助(我不确定)。但无论如何,这是另一个问题的主题,thanks@user236945896-屏幕渲染是另一个问题。什么操作系统,什么“屏幕”?