首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >collation_server与默认字符集/排序mysql之间的差异

collation_server与默认字符集/排序mysql之间的差异
EN

Stack Overflow用户
提问于 2016-11-20 01:53:36
回答 2查看 2.9K关注 0票数 0

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

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

代码语言:javascript
复制
init_connect                    = 'SET collation_connection=utf8_unicode_ci'
init_connect                    = 'SET NAMES utf8'
character-set-server            = utf8
collation-server                = utf8_unicode_ci

当我在不指定模式的情况下登录数据库时,我会看到以下排序规则变量集:

代码语言:javascript
复制
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)当我在collation_connection文件中指定utf8_unicode_ci时,为什么要将utf8_unicode_ci设置为my.cnf?

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

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

EN

回答 2

Stack Overflow用户

发布于 2016-11-20 10:41:21

几个字符集和排序系统变量与客户端与服务器的交互有关。

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

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

票数 3
EN

Stack Overflow用户

发布于 2016-11-20 18:57:08

另一种处理字符集的方法。(这绕过了提出的问题,提供了一个“最佳做法”)。

  • 连接到数据库时,使用客户端的connect参数来宣布客户机中字节的编码。或者,在连接后执行SET NAMES
  • 确保每一列都有所需的CHARACTER SET和所需的COLLATION。这将建立存储在列中的编码。通常,在CREATE TABLE上指定这些内容并让列继承这些内容就足够了。(该表默认为数据库,默认为character_set_server,但依赖于这棵默认值树可能是不明智的。)

SET NAMES准确地设置了这三个“变量”:

代码语言:javascript
复制
character_set_client
character_set_connection
character_set_results

将它们看作是表示客户机中存在什么编码,而不管每个列上存在什么CHARACTER SET。转换将根据需要在INSERTSELECT上进行。

(这个答案不应与@bodi0冲突。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40699873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档