手机网站开发指南,国外企业网络发展的现状,网站后台上传的照片模糊,thinkphp 门户网站3.1 字符集和比较规则简介
3.1.1 字符集简介
如何存储字符串#xff1f;需要建立字符与二进制数据的映射关系。建立这个关系需要#xff1a;
1.把哪些字符映射成二进制数据#xff1f;
2.怎么映射#xff1f;
将一个字符映射成一个二进制数据的过程也叫做 编码 #…3.1 字符集和比较规则简介
3.1.1 字符集简介
如何存储字符串需要建立字符与二进制数据的映射关系。建立这个关系需要
1.把哪些字符映射成二进制数据
2.怎么映射
将一个字符映射成一个二进制数据的过程也叫做 编码 将一个二进制数据映射到一个字符的过程叫做 解码 。
人们抽象出一个 字符集 的概念来描述某个字符范围的编码规则。比方说我们来自定义一个名称为 xiaohaizi 的字符集它包含的字符范围和编码规则如下
包含字符 a 、 b 、 A 、 B 。
编码规则如下
采用1个字节编码一个字符的形式字符和字节的映射关系如下
a - 00000001 (十六进制0x01)
b - 00000010 (十六进制0x02)
A - 00000011 (十六进制0x03)
B - 00000100 (十六进制0x04)
有了 xiaohaizi 字符集我们就可以用二进制形式表示一些字符串了下边是一些字符串用 xiaohaizi 字符集编码后的二进制表示
bA - 0000001000000011 (十六进制0x0203)
baB - 000000100000000100000100 (十六进制0x020104)
cd - 无法表示字符集xiaohaizi不包含字符c和d
3.1.2 比较规则简介
比较规则如下
1.将两个大小写不同的字符全都转为大写或者小写
2.再比较这两个字符对应的二进制数据。
同一种字符集可以有多种比较规则。
3.1.3 一些重要的字符集
ASCII 字符集
共收录128个字符包括空格、标点符号、数字、大小写字母和一些不可见字符。由于总共才128个字符所以可以使用1个字节来进行编码我们看一些字符的编码方式
L - 01001100十六进制0x4C十进制76
M - 01001101十六进制0x4D十进制77
ISO 8859-1 字符集
共收录256个字符是在 ASCII 字符集的基础上又扩充了128个西欧常用字符(包括德法两国的字母)也可以使用1个字节来进行编码。这个字符集也有一个别名 latin1 。
GB2312 字符集
收录了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。其中收录汉字6763个其他文字符号682个。同时这种字符集又兼容 ASCII 字符集所以在编码方式上显得有些奇怪
如果该字符在 ASCII 字符集中则采用1字节编码。
否则采用2字节编码。
GBK 字符集
GBK 字符集只是在收录字符范围上对 GB2312 字符集作了扩充编码方式上兼容 GB2312 。
utf8 字符集
收录地球上能想到的所有字符而且还在不断扩充。这种字符集兼容 ASCII 字符集采用变长编码方式编码一个字符需要使用14个字节。
3.2 MySQL中支持的字符集和排序规则
3.2.1 MySQL中的utf8和utf8mb4
在 MySQL 中 utf8 是 utf8mb3 的别名所以之后在 MySQL 中提到 utf8 就意味着使用1~3个字节来表示一个字符如果大家有使用4字节编码一个字符的情况比如存储一些emoji表情啥的那请使用 utf8mb4 。
3.2.2 字符集的查看
MySQL 支持好多种字符集查看当前 MySQL 中支持的字符集可以用下边这个语句
SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式];
其中 CHARACTER SET 和 CHARSET 是同义词用任意一个都可以。我们查询一下支持的字符集太多了我们省略了一些 可以看到我使用的这个 MySQL 版本一共支持 41 种字符集其中的 Default collation 列表示这种字符集中一种默认的 比较规则 。大家注意返回结果中的最后一列 Maxlen 它代表该种字符集表示一个字符最多需要几个字节。 字符集名称 Maxien ascii 1 latinl 1 gb2312 2 gbk 2 utf8 3 utf8mb4 4
3.2.3 比较规则的查看
查看 MySQL 中支持的比较规则的命令如下
SHOW COLLATION [LIKE 匹配的模式];
先查看一下 utf8 字符集下的比较规则 这些比较规则的命名还挺有规律的具体规律如下
比较规则名称以与其关联的字符集的名称开头。如上图的查询结果的比较规则名称都是以 utf8 开头的。
后边紧跟着该比较规则主要作用于哪种语言比如 utf8_polish_ci 表示以波兰语的规则比较utf8_spanish_ci 是以西班牙语的规则比较 utf8_general_ci 是一种通用的比较规则。
名称后缀意味着该比较规则是否区分语言中的重音、大小写啥的具体可以用的值如下
|后缀|英文释义|描述| |:--:|:--:|:--:| | _ai | accent insensitive |不区分重音| | _as | accent sensitive |区分重音| | _ci | case insensitive |不区分大小写| | _cs | case sensitive |区分大小写| | _bin | binary |以二进制方式比较|
比如 utf8_general_ci 这个比较规则是以 ci 结尾的说明不区分大小写。
每种字符集对应若干种比较规则每种字符集都有一种默认的比较规则 SHOW COLLATION 的返回结果中的Default 列的值为 YES 的就是该字符集的默认比较规则比方说 utf8 字符集默认的比较规则就是utf8_general_ci 。