今天是学习MySQL
系列的第4天,今天要学习的是MySQL
字符集以及字符序。
什么是字符集
我们问到这个问题的时候,你可能会说,哦,我知道呀,字符集就是类似于utf8
、GB2312
等,那你知道其中是怎么样存储的么? 那让我们来看看吧。
众所周知,我们计算机只能存储二进制数据 0
和1
,那我我们如何表示字符呢,例如: juejin
、你好
等,这个时候就会用到编码,它会将二进制和字符进行绑定,我们需要的时候再获取出来。
例如,我们的ascii
编码,我们不妨打开Linux
终端,输入
man ascii
我们来看看ascii
编码
若我们想使用ascii
编码存入hello juejin
,我们仅需要存储104,101,108,108,111,32,106,117,101,106,105,110
即可,我们看案例
执行结果如下
实际上,我们ascii
编码,只有128位,只能存储0-9
、a-z
、A-Z
以及一些特殊字符 和 键位,假如我们想存储你好 掘金
应该怎么办呢? 使用ascii
肯定不行的,那我们就可以使用GB2312
、UTF8
等 字符编码来存储。
具体字符集存储逻辑就不多做展示了。
MySQL 字符集
字符集
我们来看看MySQL
支持哪些编码呢,我们可以使用如下命令来查看。
show charset;
执行效果如下
其中,Charset
是字符集名称,Description
是对该字符集的简介,Maxlen
是该字符集使用多少字节存储,Default collation
是排序规则。
字符序
那什么是排序规则呢,其命名方式为 字符集名称_语言_后缀 ,例如: latin1_swedish_ci
,其中后缀是大致区分为如下
名称 | ci | cs | bin |
含义 | 不区分大小写进行排序 | 区分大小写进行排序 | 以二进制进行排序 |
比如我们创建表t1
,只有一个字段c1
其类型为varchar(1)
,我们向其插入('a'),('A'),('e'),('B'),('c'),('d'),('E'),('f')
数据,我们来验证其搜索结果。
我们已经创建了表并且插入了数据,默认情况下,latin7
的字序为latin7_general_ci
,我们查询下c1
值为a
的。
反之,我们将其修改为latin7_general_cs
,查询则会区分大小写,例如:
总结
今天我们看了字符集,为什么要要有字符集呢,是因为计算机只能存储0
和1
类似于这类数据,想要让它识别更多,比如hello juejin
,你好
,我们就需要一个字符和底层数组转换的表,这个表就是所谓的字符集,字符集从最开始的ascii
到后面的utf8
,等等,而MySQL
中也有字符集以及字符序,其中,字符集和我们前面类似,字符序名称命名规则如下: 字符集名称_语言_后缀,我们也做了关于字符序的测试,嗯,块动手来试试吧。