字符集和排序规则优先级

xv8emn3q  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(340)

在mysql中,我可以在服务器、数据库和表级别配置字符集和排序规则。
这是相同的优先级别吗?从最小到最具体?
我没能在文件里找到。

e、 g.:

服务器级别

SHOW VARIABLES LIKE "char%";

结果:

character_set_client        utf8
character_set_connection    utf8
character_set_database      latin1
character_set_filesystem    binary
character_set_results       utf8
character_set_server        latin1
character_set_system        utf8

db电平

SELECT * FROM information_schema.SCHEMATA;

结果:

name        character_set_name  collation_name
my_database latin1              latin1_swedish_ci

表级别

SELECT T.table_name, CCSA.character_set_name 
FROM information_schema.`TABLES` T,
     information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
  AND T.table_schema = "my_database";

结果:

table_name      character_set_name
my_table1           latin1
my_table2           utf8
mgdq6dx1

mgdq6dx11#

数据库设置是创建表时的默认设置。
表设置是创建列时的默认设置。
列设置是唯一重要的。
嗯,这不完全正确。您需要指定什么编码( CHARACTER SET )客户端使用排序规则。那就是 character_set_client/connection/results 开始发挥作用。这3个值通常设置为彼此相同,但它们不需要与列的值匹配 CHARACTER SET .
如果列与这些设置不匹配,mysql将在客户端和服务器之间动态地对字节进行转码。请注意,这样可以为同一表中的不同列提供不同的字符集。
上一段没有提到表和数据库设置,因为它们是不相关的(因为它们只是默认值。)一旦一个表 CREATEd ,每列的字符集都是“一成不变的”。

anhgbhbe

anhgbhbe2#

在手册10.3指定字符集和排序规则以及后续页面的这一节中,您可以找到不同级别(服务器、数据库、表和列)的详细信息。在数据库、表和列级别,它声明如果您不显式地设置字符集和排序规则,则使用上一级别的字符集和排序规则,这将等同于从最小到最具体的概念。

相关问题