02 | MySQL字符集和校对顺序

全球化与本地化

本文主要介绍mysql处理不同字符语言的基础知识

字符集和校对顺序

由于不同的语言和字符集需要以不同的方式存储和检索MySQL,因此需要适应不同的字符集(不同的字母和字符),适应不同的排序和检索数据的方法。

重要术语

术语含义
字符集字母和符号的集合
编码某个字符集成员的内部表示
校对规定如何比较字符集的指令

使用字符集和校对顺序

查看所支持的字符集的完整列表

-- 查看所有的可支持的字符集
SHOW CHARACTER SET;
-- 查看所有可支持的校对顺序
SHOW COLLATION;

查看目前所使用的字符集和校对顺序

SHOW VARIABLES LIKE 'character%';

SHOW VARIABLES LIKE 'collation%';

不同的表,甚至不同的列都可能需要不同的字符集,而且两者都可以在创建表时指定

给表指定字符集和校对

CREATE TABLE mytable
(
    column1 INT,
    column2 VARCHAR(10)
) DEFAULT CHARACTER SET hebrew
  COLLATE hebrew_general_ci;

此语句创建一个包含两列的表,并且指定一个字符集和一个校对顺序

MySQL可使用如下方式确定使用什么样的字符集和校对:

  • 如果指定CHARACTER SETCOLLATE两者,则使用这些值。
  • 如果只指定CHARACTER SET,则使用此字符集及其默认的校对(如SHOW CHARACTER SET的结果中所示)。
  • 如果既不指定CHARACTER SET,也不指定COLLATE,则使用数据库默认。

给每个列指定字符集和校对顺序

CREATE TABLE mytable(
    column1 INT,
    column2 VARCHAR(10),
    column3 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_danish_ci
)DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci;

校对在对用ORDER BY子句检索出来的数据排序时起重要的作用。如果需要用与创建表时不同的校对顺序排序特定的SELECT语句,可以在SELECT语句自身中进行:

SELECT * FROM customers
ORDER BY CAST(cust_name AS ) ,cust_address COLLATE latin1_general_cs;

SELECT的其他COLLATE子句:除了这里看到的在ORDER BY子句中使用以外, COLLATE还可以用于GROUP BY、 HAVING、聚集函数、别名等。

相关推荐