MYSQL数据库中的数据类型分为二进制和非二进制。区别如下:
一、二进制:
字符串类型包括:binary、varbinary、blob,主要是处理图像、视频、音频等文件,与字符集无关。
这类文件一般是放在服务器硬盘里,而不是数据库里,如果要放在数据库,就一定不能指定字符集类型,否则会把二进制字段转换成相应的非二进制字符,图像和视频就不能正常显示了。
在文件头部要指定类型:
1header('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、连接数据库,展示现有的数据库:
2、使用dede6这个数据库,并且新建一个demo1的表,插入字段name1和name2,并且指定name1的字符集是utf8,name2的字符集是gbk。
3、根据字段,分别往表中插入“盾”这个字。
4、对比name1和name2中“盾”字所占的字节大小,可以看到,同一个“盾”字,name1(utf8编码)占3个字节,name2(gbk编码)占2个字节。
length(字段名)表示字节的个数,char_length(字段名)表示字符的个数。
5、再来对比下字符集大小写的区别,首先显示mysql数据库的字符集校对规则,show collation;首先可以看到,标注yes的都是默认字符集校对规则,也就是说当你建表的时候如果不指定字符大小写校对规则,就默认采用ci(不区分大小写)校对规则。
6、重新建立一张表demo2,并插入字段name1(utf8编码采用utf8_bin校对规则)和字段2(utf8编码utf8_general_ci)。
7、根据字段分别往demo2表中插入数据。
8、根据不同的校对规则显示内容。