6、MYSQL数据库字符集、校对规则、二进制与非二进制字符串类型使用

阅读() @2018-07-15 14:13:35

MYSQL数据库中的数据类型分为二进制和非二进制。区别如下:

一、二进制:

字符串类型包括:binary、varbinary、blob,主要是处理图像、视频、音频等文件,与字符集无关。

这类文件一般是放在服务器硬盘里,而不是数据库里,如果要放在数据库,就一定不能指定字符集类型,否则会把二进制字段转换成相应的非二进制字符,图像和视频就不能正常显示了。

在文件头部要指定类型:

header('content-type:image/jpeg');

二、非二进制:

字符串类型包括:char、varchar、text,主要用于处理文本格式的文件。

关于字符串类型,可以查看《MYSQL数据类型定义与选择方法总结》详解。

字符集就是一堆字符的集合,字符集的编码格式主要有以下几种:

1、utf-8:基于unicode编码(万国码),国际标准化组织制定的一套包含了世界上所有编码类型的字符,如果一个网页上想同时显示简体、繁体以及其他地区的一些字符,就可以使用utf8编码。每个字符的长度是1-3个字节,比如说【a】是一个字节,【盾】是3个字节。

2、gb2312:简体字,包含6700多个汉字,每个汉字相当于2个字节,每个英文单词相当于1个字节。

3、gbk:简体字和繁体字,包含21000多个汉字,由中国内地编写的编码库,每个汉字相当于2个字节,每个英文单词相当于1个字节。

4、big5:繁体字,包含13000多个汉字,也叫大五码,每个汉字相当于2个字节,每个英文单词相当于1个字节。

通过命令行客户端的数据比对,可以更加直观的理解以上所说的内容:

1、连接数据库,展示现有的数据库:

链接mysql数据库

2、使用dede6这个数据库,并且新建一个demo1的表,插入字段name1和name2,并且指定name1的字符集是utf8,name2的字符集是gbk。

创建name1和name2字段

3、根据字段,分别往表中插入“盾”这个字。

往表中插入数据

4、对比name1和name2中“盾”字所占的字节大小,可以看到,同一个“盾”字,name1(utf8编码)占3个字节,name2(gbk编码)占2个字节。

length(字段名)表示字节的个数,char_length(字段名)表示字符的个数。

utf8和gbk编码的字符所占字节对比

5、再来对比下字符集大小写的区别,首先显示mysql数据库的字符集校对规则,show collation;首先可以看到,标注yes的都是默认字符集校对规则,也就是说当你建表的时候如果不指定字符大小写校对规则,就默认采用ci(不区分大小写)校对规则。

show collation查看mysql字符集校对规则

6、重新建立一张表demo2,并插入字段name1(utf8编码采用utf8_bin校对规则)和字段2(utf8编码utf8_general_ci)。

建立数据表demo2

7、根据字段分别往demo2表中插入数据。

往demo2中插入数据

8、根据不同的校对规则显示内容。

对比不同校对规则下的数据差异

微信二维码
锐壳主机