在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
2条答案
按热度按时间mgdq6dx11#
数据库设置是创建表时的默认设置。
表设置是创建列时的默认设置。
列设置是唯一重要的。
嗯,这不完全正确。您需要指定什么编码(
CHARACTER SET
)客户端使用排序规则。那就是character_set_client/connection/results
开始发挥作用。这3个值通常设置为彼此相同,但它们不需要与列的值匹配CHARACTER SET
.如果列与这些设置不匹配,mysql将在客户端和服务器之间动态地对字节进行转码。请注意,这样可以为同一表中的不同列提供不同的字符集。
上一段没有提到表和数据库设置,因为它们是不相关的(因为它们只是默认值。)一旦一个表
CREATEd
,每列的字符集都是“一成不变的”。anhgbhbe2#
在手册10.3指定字符集和排序规则以及后续页面的这一节中,您可以找到不同级别(服务器、数据库、表和列)的详细信息。在数据库、表和列级别,它声明如果您不显式地设置字符集和排序规则,则使用上一级别的字符集和排序规则,这将等同于从最小到最具体的概念。