什么是Mysql字符集?什么是校对规则?
字符集是一套符号和编号。校对规则是在字符集内用于比较字符的一套规则。宇符(character)是人类语言中最小的表义符号。例如字母A、B等:给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encoding)。例如,我们给字符A赋子数值 0,给字符B赋予数值 1,则0就是字符A的编码,1就是字符B的编码;给定一系列宇符并赋子对应的编码后,所有这些字符和编码对组成的集合就是字符集(Character Set)。其实很好理解,就是相当于大家去菜鸟取件,每个取件码对应一个取物柜。但每个取物柜里面不一定只有一个快递哦!这个接下来会有体现。
校对规则是指在同一字符集内字符之间的比较规则;确定校对规则后,才能在一个字符集上定义什么是等价的字符,以及字符之间的大小关系。
注意:
每个校对规则唯一对应一种字符集;
一个字符集可以对应多种校对规则,其中有一个是默认校对规则(Default Collation);
两个不同的字符集不能有相同的校对规则。
服务器、数据库、表、列都可以选择不同的字符集(有小伙伴就会想每个使用不同的字符集和规则不会有问题吗?当然是不会的啦!只要是在所支持的范围内,会根据校对规则进行转换的哦~)
mysql> show collation; #列出校对规则
mysql> show character set; #列出可用字符集
mysql> show variables like 'character%'; #列出默认字符集
mysql> show variables like 'character_%'; #列出默认字符集
#服务器字符集和校对规则
#Mysql服务器又一个服务器字符集和一个服务器校对规则,且不能为空
#设置字符集和校对规则,不设置则默认为latin1、latinl_swedish_ci
#下面三串代码的效果是一样的
mysald
mysqld --default-character-set=latin1
mysqId --default-character-set=latinl --default-collation=latinl_swedish_ci
#数据库字符集和校对规则
#每一个数据库都有一个数据库字符集和数据库校对规则,且不能为空
#如果没有指定则默认为服务器字符集和校对规则
create database b_name default CHARACTER SET latin1 COLLATE latin1_swedish_ci;
#表字符集和校对规则
#每个表拥有一个字符集规则和校对规则,且不能为空
create table t1 ( ... ) default CHARACTER SET latin1 COLLATE latin1_danish_ci;
#列字符集和校对规则
#每列拥有一个字符集规则和校对规则,且不能为空
#如果没有指定则默认表字符集和校对规则
create table table1
(
column1 VARCHAR(5) CHARACTER SET latin1 COLLATE latin1_german1_ci
);
#查看字符集和校对规则
#修改字符集和校对规则
#设置默认字符集
mysql> set character_set_client=utf8;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show variables like 'character%';
+--------------------------+------------------------------------------------------+
| Variable_name | Value |
+--------------------------+------------------------------------------------------+
| character_set_client | utf8mb3 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/local/mysql-8.2.0-macos13-arm64/share/charsets/ |
+--------------------------+------------------------------------------------------+
8 rows in set (0.01 sec)
大家可以根据自己需要进行相关变量配置,也可以根据上面代码进行熟悉练习~