在MySQL中,我可以在服务器,数据库和表级别上配置字符集和排序规则。
这是相同的优先级吗?从最小到最具体?
我没有在DOCS中找到它。
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
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
答案 0 :(得分:0)
您将在手册10.3 Specifying Character Sets and Collations的此部分及后续页面中找到不同级别(服务器,数据库,表和列)的详细信息。在数据库,表和列级别,它声明如果未显式设置字符集和排序规则,则使用上一级别的字符集和排序规则,这相当于您对最具体概念的了解最少。
答案 1 :(得分:0)
创建表时,数据库设置是默认。
创建列时,表格设置是默认。
列设置是唯一重要的事情。
嗯,那不是完全正确的。您需要指定 client 使用哪种编码(CHARACTER SET
)和排序规则。这就是character_set_client/connection/results
发挥作用的地方。通常将这3个设置为相同,但不需要匹配列的CHARACTER SET
。
如果该列与这些设置不匹配,则MySQL将在客户端和服务器之间传递字节时对它们进行动态转码。请注意,这使您可以为 same 表中的不同列使用不同的字符集。
上一段对表和数据库设置没有任何说明-因为它们是不相关的。 (因为它们只是默认值。)将表CREATEd
设置为{1}后,每一列的字符集都被设置为“石头”。