3.1字符集和计较规则简介
3.1.1 字符集简介
编码:将字符映射成一个二进制数据
解码:将二进制映射到字符
采用1个字节编码一个字符的形式,字符和字节的映射关系如下:
' a' -> 00000001 (十六进制:0x01)
'b' -> 00000010 (十六进制:0x02)
字符集编 码后的二进制表示:
'bA' -> 0000001000000011 (十六进制:0x0203)
'baB' -> 000000100000000100000100 (十六进制:0x020104)
人们抽象出一个字符集的概念来描述某个字符范围的编码规则。
3.1.2比较规则简介
3.1.3一些重要的字符集
ASCII字符集:共收录128个字符,包括空格、标点符号、数字、大小写字符和一些不可见的字符。所以可以使用一个字节来进行编码
ISO 8859-1字符集:共收录256个字符,是在ASCII字符集的基础上又扩充了128个西欧常用字符(包括德法两国的字母),也可以使用一个字节进行编码。
GB2312字符集:收集了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。其中收录汉字6763个,其它文字符号682个。兼容ASCII字符集,
1.如果该字符集在ASCII字符集中,则采用1字节编码
2.否则采用2字节编码
这种表示一个字符需要的字节数量可能不同的编码方式称为变长编码方式。
GBK字符集:GBK字符集只是在收录字符范围上对GB2312字符集做扩充,编码格式上兼容GB2312。
UTF-8字符集:收录地球上能想到的所有字符,而且还在不断的扩充。这种字符集兼容ASCII字符集,采用变长编码方式,编码一个字符需要使用1到4个字节
3.2MySQL中支持的字符集和排序规则
3.2.1MySQL中的UTF8和UTF8mb4
UTF8mb3:阉割过的UTF8字符集,只使用了1~3个字节表示字符
UTF8mb4:正宗的UTF8字符集,使用1·4个字节表示字符
备注:UTF8是UTF8mb3的别名。如果需要存储一些emoji表情啥的请使用utf8mb4
3.2.2字符集查询
MySQL支持41中字符集,查看字符集的语句:
SHOW(CHARACTER SET|CHARSET) [LIKE 匹配的模式];
其中 CHARACTER SET 和 CHARSET 是同义词,用任意一个都可以。
例:SHOW CHARSET;
+----------+---------------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+---------------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
...
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
...
| ascii | US ASCII | ascii_general_ci | 1 |
...
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
...
| gbk | GBK Simplified Chinese |