Mysql 字符集
字符集与字符比较
字符集
字符集是某种字符的集合,比如最常见的ASCII码,由127个字符组成,只需要一个字节就能表示;
我们常说的字符集还是GBK、ISOXXX、UTF8;
Mysql 我们使用得最多的字符集就是GBK 和 UTF8了;他们都是变长字符集,如果字符在ASCII范围内就使用一个字节表示,其他的字符可能会是2个、3个、4个字节;
Mysql中的UTF8 有3种, UTF-8字符集字节长度范围:1-4个字节,UTF-16字符集字节长度范围:2-4个字节,UTF-32就是使用4个字节;
我们通常说的UTF8就是指UTF8mb3,只使用1-3个字节来存储;
SHOW CHARSET; 可以查看Mysql服务能支持的所有字符集;
字符比较规则
每种字符集都有自己的比较规则;也可能支持多种比较规则;
SHOW COLLATION LIKE ‘%UTF%’; 来查看UTF的比较规则;
后缀英文释义描述
_ai
accent insensitive
不区分重音
_as
accent sensitive
区分重音
_ci
case insensitive
不区分大小写
_cs
case sensitive
区分大小写
_bin
binary
以二进制方式比较
小结:
1、修改字符集可能会影响字符的比较规则
2、修改字符的比较规则可能会影响字符串
3、他们都可应用于:服务器、库、表、列
character_set_server(database),collation_server(database)
4、客户端调用服务器的字符变化:
系统变量描述
character_set_client
服务器解码请求时使用的字符集
character_set_connection
服务器处理请求时会把请求字符串从character_set_client
转为character_set_connection
character_set_results
服务器向客户端返回数据时使用的字符集
5、不同字符集联表会向上转型:
A表(utf8) 连 B表(utf8mb4 ) B表可以走索引,
M表(utf8mb4) 连 K表(utf8 ) K表不会走索引
参考文章:<<MySQL是怎样运行的>>