目录
1.概念普及:
<1> 按照一定规则将符号转换成对应的二进制码,这就是编码。
<2>而将多个这种已经编码好的字符聚到一起,则称为字符集。
2.编码格式总结:
在日常生活中编辑器上敲出的中文和英文字母,都是给我们人进行读写的。而计算机真正将数据存储和传输都是以二进制的格式进行的。
1>ascll编码格式
在使用二进制传输与保存时,就需要有一个规则限制,将中文和英文字母转化为二进制格式。例如:a 表示的16进制是61,则转换为二进制格式则为0110 0001。这就是ascll码格式。它用1个字节,亦或者说8位二进制数表示字符。 而基础的符号有128个,拓展符号有128个,只能表示英文字母和数字。
2>unicode编码格式
但这明显不够,所以为了标识中文 则出现了GB2312编码格式,为了标识希腊语,则出现了greek格式。为了标识俄语,则出现了cp866格式。而这些用于标识其他语言的格式统称为unicode格式。Unicode编码格式 ,用2-4个字节进行表示字符。理论上基本所有符号都可以收录进去,并且它也兼容了ascll码格式。
但ascll码格式只用了一个字节,而unicode编码格式则用了2个字节,例子如下:
ascll编码 : 00000001
unicode编码:00000000 00000001
由上对比可知,unicode编码前面的8位多余的二进制数,用不上,但却占了一个字节,有些浪费,所以出现了utf8编码。
3>utf8和utfbmb4编码格式的区别
1.mysql支持utf8和utfmb4 格式字符集
2.而utf8编码格式是mysql默认的编码格式字符集,而它最多支持3个字节表示字符,这里也 可以称它位“utfmb3”.
3.utfmb4则是最多支持4个字节便是字符。
4.并且utf8(utfmb3)只支持部分字符。例如emoji字符就不支持。
5.而在mysql字符集里 collation 是比较规则
例如:hello Hello
这两个单词是同一个单词,但是大小写不同 ,该不该判定他们的大小写则需要用到 collation 了。
如果collation = utf8mb4_general_ci
,是指使用utf8mb4字符集的前提下,挨个字符进行比较(general
),并且不区分大小写(_ci,case insensitice
)。
这种情况下,"debug"和"Debug"是同一个单词。
如果改成collation=utf8mb4_bin
,就是指挨个比较二进制位大小。
于是"debug"和"Debug"就不是同一个单词。
如果改成collation=utf8mb4_bin
,就是指挨个比较二进制位大小。
于是"debug"和"Debug"就不是同一个单词。
我们知道数据库表里,字段类型如果是char(2)
的话,里面的2
是指字符个数,也就是说不管这张表用的是什么编码的字符集,都能放上2个字符。
而char又是固定长度,为了能放下2个utf8mb4的字符,char会默认保留2*4(maxlen=4)= 8
个字节的空间。
如果是utf8mb3,则会默认保留 2 * 3 (maxlen=3) = 6
个字节的空间。也就是说,在这种情况下,utf8mb4会比utf8mb3多使用一些空间。