MySQL处理不同字符集和语言的基础知识

字符集和校对顺序

数据库表被用来存储和检索数据。
不同的语言和字符集需要以不同的方式存储和检索
MySQL需要适应不同的字符集(字母和字符),应应不同的排序和检索数据的方法

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

校对的重要性

排序英文字母根据区分大小写排序的结果有所不同,其影响到排序ORDER BY和搜索WHERE等子句。如果使用不给予拉丁文的字符集将更为复杂

使用何种字符集和校对的决定在服务器、数据库和表级进行

使用字符集和校对顺序

MySQL支持众多的字符集

  • 字符集
SHOW CHARACTER SET;

显示所有可用的字符集以及每个字符集的描述和默认校对
image.png

  • 校对
SHOW COLLATION;

有的字符集不止一种校对,_cs表示区分大小写,_ci表示不区分大小写
image.png

确定使用的字符集和校对

SHOW VARIABLES LIKE "CHARACTER%";
SHOW VARIABLES LIKE "collation%";

image.png
image.png

给表指定字符集和校对

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

创建一个包含两列的表,并且指定一个字符集和一个校对顺序
![image.png](/upload/2021/07/image-- a55c17912d6548e8a73ae94dfb488873.png)

  • CHARACTER SET和COLLATE指定了字符集和校对
    1.如果同时有CHARACTER SET、COLLATE则使用这些值
    2.如果只有CHARACTER SET则默认使用此字符集的校对
    3.如果都没有则使用数据库默认值

给指定列设置字符集和校对

除了表之外,还支持不同列设置不同的字符集和校对

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

其对整个表和特定的列都设置了不同的字符集和校对
image.png

对SELECT语句指定校对

与创建表时不同的校对顺序排序特定的SELECT语句,可以在SELECT语句自身中进行

SELECT
	* 
FROM
	customers 
ORDER BY
	cust_id,
	cust_city COLLATE latin1_general_cs;

SELECT的其他COLLATE子句

除了ORDER BY之外,还可用于ROUP BY、HAVING、聚集函数、别名等


这个家伙很懒,啥也没有留下😋