在MySQL中,字符集(Character Set)和校对规则(Collation)是两个重要的概念,它们共同决定了数据库中字符数据的存储和比较方式。
### 字符集(Character Set)
字符集定义了可以存储的字符,以及它们的编码。MySQL支持多种字符集,如utf8、utf8mb4、latin1、gbk等。每种字符集都包含了可以表示的字符和它们对应的编码。
### 校对规则(Collation)
校对规则定义了字符的比较规则,以及字符集的排序方式。不同的校对规则可能会对相同的字符集有不同的排序和比较逻辑。例如,`utf8_general_ci`和`utf8_bin`都是针对utf8字符集的校对规则,但`utf8_general_ci`是不区分大小写的,而`utf8_bin`是区分大小写的。
### 查看MySQL支持的字符集和校对规则
你可以通过以下SQL语句来查看MySQL服务器支持的字符集和校对规则:
-- 查看所有支持的字符集
SHOW CHARACTER SET;
-- 查看某个字符集的所有校对规则(以utf8为例)
SHOW COLLATION WHERE Character_set_name = 'utf8';
-- 或者查看所有校对规则
SHOW COLLATION;
### 设置数据库、表或列的字符集和校对规则
在创建数据库、表或列时,你可以指定它们使用的字符集和校对规则。例如:
-- 创建数据库时指定字符集和校对规则
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建表时指定字符集和校对规则
CREATE TABLE mytable (
id INT AUTO_INCREMENT,
name VARCHAR(100),
PRIMARY KEY (id)
) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 修改表的字符集和校对规则
ALTER TABLE mytable CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建列时(实际上列的字符集和校对规则通常继承自表)
-- 但也可以为列指定不同的字符集和校对规则(不推荐,因为会增加复杂性)
请注意,直接为列指定字符集和校对规则是不常见的做法,因为这样做会增加数据库的复杂性,并可能导致不一致的行为。通常,你会在数据库或表级别指定这些设置,并让列继承这些设置。