繁体   English   中英

MySQL中的字符集和排序规则优先级

[英]Charset and collation priority in MySQL

在MySQL中,我可以在ServerDatabaseTable级别配置字符集和排序规则。

这是同等的优先级吗? 从最小到最具体?
我没有在DOCS中找到它。

例如:

服务器级别

SHOW VARIABLES LIKE "char%"; 
结果是:
SELECT * FROM information_schema.SCHEMATA;

数据库级别

 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 

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

创建表时,“数据库”设置是默认设置。
创建列时,表设置是默认设置。
列设置是唯一重要的事情。

好吧,那不是完全正确的。 您需要指定客户端使用哪种编码( CHARACTER SET )和排序规则。 这就是character_set_client/connection/results起作用的地方。 通常,这3个设置彼此相同,但是它们不需要匹配列的CHARACTER SET

如果该列与这些设置不匹配,则MySQL将在客户端和服务器之间传递字节时对它们进行动态转码。 请注意,这使您可以为同一表中的不同列使用不同的字符集。

上一段对表和数据库设置没有任何说明-因为它们是不相关的。 (因为它们仅是默认值 。)一旦创建了表, CREATEd每个列的字符集“固定在石头上”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM