Mysql面试题之编码和字符集的关系

目录

1.概念普及:

2.编码格式总结:

1>ascll编码格式

2>unicode编码格式

3>utf8和utfbmb4编码格式的区别


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多使用一些空间。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值