本章介绍MySQL处理不同字符集和语言的基础知识。
27.1 字符集和校对顺序
- 字符集:字母和符号的集合
- 编码:某个字符集成员的内部标识
- 校对:规定字符如何比较的指令
校对很重要
使用何种字符集和校对的决定在服务器、数据库和表级进行。
27.2 使用字符集和校对顺序
查看所支持的字符集完整列表:
SHOW CHARACTER SET;
显示所有可用的字符集以及每个字符集的描述和默认校对。
查看所支持校对的完整列表:
SHOW COLLATION;
此语句显示所有可用的校对,以及它们适用的字符串。有的字符集具有不止一种校对。许多校对出现两次,一次区分大小写(由_cs表示),一次不区分大小写(由下划线ci表示)
通常系统管理在安装时定义一个默认的字符集和校对。也可以在创建数据库时,指定默认的字符集和校对。为了确定所用的字符集和校对,可以使用以下语句:
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';
实际上,字符集很少是服务器范围(甚至数据库范围)的设置。不同的表,甚至不同的列都可能需要不同的字符集,而且两者都可以在创建表时指定。
给表指定字符集和校对:
CREATE TABLE mytable
(column1 INT,column2 VARCHAR(10)
)DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;
- 如果指定CHARACTER SET和COLLATE两者,则使用这些值。
- 如果只指定CHARACTER SET,则使用此字符集及其默认的校对(SHOW CHARACTER SET的结果所示)
- 如果既不指定CHARACTER SET,也不指定COLLATE,则使用数据库默认。
MySQL允许对每个列设置字符集和校对。
CREATE TABLE mytable
(column1 INT,column2 VARCHAR(10)column3 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci
)DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;
校对在对用ORDER BY子句检索出来的数据排序时起重要作用。如果你需要用与创建表时不同的校对顺序排序特定的SELECT语句,可以在SELECT语句自身中进行;
区分大小写:
SELECT * FROM customers
ORDER BY lastname,firstname COLLATE latin1_general_cs;