mysql - collat​​ion_server 和默认字符集/排序规则 mysql 之间的区别

标签 mysql utf-8 collation

我很难理解 my.cnf 设置和实际数据库设置之间的逻辑差异。

例如,我的 my.cnf 有以下内容:

init_connect                    = 'SET collation_connection=utf8_unicode_ci'
init_connect                    = 'SET NAMES utf8'
character-set-server            = utf8
collation-server                = utf8_unicode_ci

当我登录数据库而不指定架构时,我会看到以下排序规则变量集:

mysql> show variables like '%coll%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_unicode_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+
3 rows in set (0.00 sec)

我有几个问题:

1) 当我在 my.cnf 文件中指定 utf8_unicode_ci 时,为什么 collat​​ion_connection 设置为 utf8_general_ci?

2)为什么我创建表时默认的排序规则是utf8_general_ci?

我很难理解这些排序规则变量是如何解释和使用的。

最佳答案

多个字符集和排序规则系统变量与客户端与服务器的交互相关。

服务器使用 character_set_connectioncollat​​ion_connection 系统变量,然后将客户端发送的语句从 character_set_client 转换为 character_set_connection (除了具有引导符的字符串文字,例如 _latin1 或 _utf8)。 collat​​ion_connection 对于文字字符串的比较非常重要。对于字符串与列值的比较,collat​​ion_connection 并不重要,因为列有自己的排序规则,具有更高的排序规则优先级

关于第二个问题 - 如果在 CREATE DATABASE 语句中未指定数据库字符集和排序规则,则服务器字符集和排序规则将用作默认值。 他们have no other purpose . 您必须确保在创建数据库时就设置了数据库字符集(或者,您当然可以稍后使用 ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_unicode_ci; 来更改它) )

关于mysql - collat​​ion_server 和默认字符集/排序规则 mysql 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40699873/

相关文章:

php - <textarea>和MYSQL在php中显示数据

php - 替换字符串中的 utf8 文字

sql - 由于排序规则不匹配,对两个数据库的查询有错误

MySQL - 使用波兰语字符进行不区分重音的搜索 - UTF8

php - 用于 MySQL 和 PHP 的最佳排序规则是什么?

php - 用手指在移动 Web 应用程序中滑动页面

php - mySQL/PHP 实际发生了什么类型的错误

mysql - 续集永远不会返回 utf-8,只是 ascii-8bit

mysql - 如何在mysql中获取触发器中的过程输入参数

ruby-on-rails - 我收到错误消息 :in `tr' : invalid byte sequence in UTF-8 (ArgumentError) when I run: ruby dk. rb init