学习MySQL系列:5. MySQL字符集

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第4天,点击查看活动详情

今天是学习MySQL系列的第4天,今天要学习的是MySQL字符集以及字符序。

什么是字符集

我们问到这个问题的时候,你可能会说,哦,我知道呀,字符集就是类似于utf8GB2312等,那你知道其中是怎么样存储的么? 那让我们来看看吧。

众所周知,我们计算机只能存储二进制数据 01,那我我们如何表示字符呢,例如: juejin你好等,这个时候就会用到编码,它会将二进制和字符进行绑定,我们需要的时候再获取出来。

例如,我们的ascii编码,我们不妨打开Linux终端,输入

man ascii

我们来看看ascii编码

若我们想使用ascii编码存入hello juejin,我们仅需要存储104,101,108,108,111,32,106,117,101,106,105,110即可,我们看案例

执行结果如下

实际上,我们ascii编码,只有128位,只能存储0-9a-zA-Z以及一些特殊字符 和 键位,假如我们想存储你好 掘金应该怎么办呢? 使用ascii肯定不行的,那我们就可以使用GB2312UTF8等 字符编码来存储。

具体字符集存储逻辑就不多做展示了。

MySQL 字符集

字符集

我们来看看MySQL支持哪些编码呢,我们可以使用如下命令来查看。

show charset;

执行效果如下

其中,Charset是字符集名称,Description是对该字符集的简介,Maxlen是该字符集使用多少字节存储,Default collation是排序规则。

字符序

那什么是排序规则呢,其命名方式为 字符集名称_语言_后缀 ,例如: latin1_swedish_ci,其中后缀是大致区分为如下

名称cicsbin
含义不区分大小写进行排序区分大小写进行排序以二进制进行排序

比如我们创建表t1,只有一个字段c1其类型为varchar(1),我们向其插入('a'),('A'),('e'),('B'),('c'),('d'),('E'),('f')数据,我们来验证其搜索结果。

我们已经创建了表并且插入了数据,默认情况下,latin7的字序为latin7_general_ci,我们查询下c1值为a的。

反之,我们将其修改为latin7_general_cs,查询则会区分大小写,例如:

总结

今天我们看了字符集,为什么要要有字符集呢,是因为计算机只能存储01类似于这类数据,想要让它识别更多,比如hello juejin你好,我们就需要一个字符和底层数组转换的表,这个表就是所谓的字符集,字符集从最开始的ascii到后面的utf8 ,等等,而MySQL中也有字符集以及字符序,其中,字符集和我们前面类似,字符序名称命名规则如下: 字符集名称_语言_后缀,我们也做了关于字符序的测试,嗯,块动手来试试吧。

posted @ 2022-07-31 16:33  pdudos  阅读(0)  评论(0编辑  收藏  举报  来源