先了解几个定义
1、计算机只能存储二进制数据,要想在计算机上保存二进制的数据,就要有对应的字符和二进制的映射。
2、将一个字符映射成一个二进制的数据较编码,返回来叫解码。
3、这时候会产生一些字符集,字符集:描述某个字符范围的编码规则。
下面我们自定义一个字符集(我们假想有这样的一个)
字符集名称:utf-ab;
字符只有: ‘a‘ ‘b‘ ;
编码规则:‘a‘ -> 00000001 (十六进制:0x01)
‘b‘ -> 00000010 (十六进制:0x02)
那么根据我们自定义的这个字符集的编码规则 ‘ab‘字符串就用 0000000100000010 来表示了。
下面说一些重要的字符集:
ASCII
字符集:共收录128个字符,包括空格、标点符号、数字、大小写字母和一些不可见字符。由于总共才128个字符,所以可以使用1个字节来进行编码;
ISO 8859-1
字符集:共收录256个字符,是在ASCII
字符集的基础上又扩充了128个西欧常用字符(包括德法两国的字母),也可以使用1个字节来进行编码;
GB2312
字符集:收录了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。其中收录汉字6763个,其他文字符号682个。同时这种字符集又兼容ASCII
字符集;
GBK
字符集:GBK
字符集只是在收录字符范围上对GB2312
字符集作了扩充,编码方式上兼容GB2312 ;
utf8
字符集:收录地球上能想到的所有字符,而且还在不断扩充。这种字符集兼容ASCII
字符集,采用变长编码方式,编码一个字符需要使用1~4个字节;
说一下mysql中的utf-8和utf-8mb4
utf-8(utf-8mb3):使用1~3个字节来表示一个字符;
utf-8mb4:1~4字节,
常用的一些字符用1-3字节就够用了,比如要保存emoji表情,那么选用4字节。
我们登录mysql后
show charset;命令可以查看支持的字符集。
mysql> show charset
-> ;
---------- ----------------------------- --------------------- --------
| Charset | Description | Default collation | Maxlen |
---------- ----------------------------- --------------------- --------
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |