字符集和校对顺序
不同的语言和字符集需要用不同的方式存储和检索,因此MySQL需要适应不同的字符集,适应不同的排序和检索方法。
几个名词术语:
1、字符集:字母和符号的集合;
2、编码:某个字符集成员的内部表示;
3、校对(collation):规定字符如何比较的指令。
使用字符集和校对顺序
查看所支持的字符集完整列表
SHOW CHARACTER SET;
这条语句显示所有可用的字符集以及每个字符集的描述和默认校对信息。
为了查看所支持校对的完整列表,使用下面语句:
SHOW COLLATION;
该语句显示所有可用的校对,以及它们适用的字符集。可以看到有的字符集具有不止一种校对。
通常系统管理在安装时定义一个默认的字符集和校对。此外,可以在创建数据库时,指定默认的字符集和校对,为了确定所使用的字符集和校对可使用:
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';
实际上,字符集很少是服务器范围的设置。不同的表甚至于不同的列都可能要用到不同的字符集,而且两者都可以在创建表时指定。
给表指定字符集和校对,可使用带子句的CREATE TABLE语句。
创建一个mytable表指定了字符集和校对顺序。
CREATE TABLE mytable
(
column1 INT,
column2 VARCHAR(10)
) DEFAULT CHARACTER SET heberw
COLLATE hebrew_general_ci;
- 如果指定CHARACTER SET和COLLATE两者,则使用这些值。
- 如果只指定CHARACTER SET,则使用此字符集及默认的校对(如SHOW CHARACTER SET的结果中所示)
- 如果即不指定CHARACTER SET,也不指定COLLATE,则使用数据库默认。
除了对指定字符集和校对的表范围外,还可以允许对每个列进行设置:
CREATE TABLE mytable
(
column1 INT,
column2 VARCHAR(10),
column3 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_general_ci
) DEFAULT CHARACTER SET heberw
COLLATE hebrew_general_ci;
校对在对用ORDER BY子句检索出来的数据排序时起到了重要作用,如果需要与创建表不同的校对顺序排序特定的SELECT语句,可以在SELECT语句自身中进行:
SELECT * FROM customers
ORDER BY lastname,firstname COLLATE lation1_general_cs;
此SELECT语句使用COLLATE语句指定了一个备用的校对顺序(为了区分大小写的校对)。
除了ORDER BY子句中使用以外,COLLATE还可以用于GROUP BY,HAVING,聚集函数、别名等。
如果需要,串可以在字符集之间进行转换。使用Cast()或Convert()函数
。
CAST()函数可以将某种数据类型的表达式转化为另一种数据类型
CONVERT()函数 也 可以将指定的数据类型转换为另一种数据类型