[英]Charset and collation priority in MySQL
在MySQL中,我可以在Server , Database和Table级别配置字符集和排序规则。
这是同等的优先级吗? 从最小到最具体?
我没有在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.