引荐参考教程:《mysql教程》
列范例(数据范例)
所谓的列范例,实在就是指数据范例,即对数据举行一致的分类,从体系的角度动身是为了能够运用一致的体式格局举行治理,更好的应用有限的空间。
在 SQL 中,将数据范例分成了三大类,分别为:数值型、字符串型和日期时刻型。
字符串型
在 SQL 中,将字符串范例分成了 6 类,分别为:char
、varchar
、text
、blob
、enum
和set
.
第 1 类:定长字符串
定长字符串:char
,即磁盘(二维表)在定义构造的时刻就已肯定了终究数据的存储长度。
char(L)
:L 示意 Length,即能够存储的长度,单元为字符,最大长度为 255;char(4)
:示意在 UTF8 环境下,须要 4*3=12 个字节。
第 2 类:变长字符串
变长字符串:varchar
,即在分派存储空间的时刻,依据最大的空间分派,然则现实用了若干,则是依据细致的数据来肯定。
varchar(L)
:L 示意 Length,理论长度是 65536,然则会多出 1 到 2 个字节来肯定存储的现实长度;varchar(10)
:比方存储 10 个汉字,在 UTF8 环境下,须要 10*3+1=31 个字节。
现实上,假如存储长度凌驾 255 个字符,则既不必定长字符串也不必变长字符串,而是用文本字符串text
.
怎样挑选定长字符串或者是变长字符串呢?
定长字符串对磁盘空间比较糟蹋,然则效力高:假如数据基本上肯定长度都一样,就运用定长字符串,比方身份证、电话号码等;
变长字符串对磁盘空间比较节约,然则效力低:假如数据不能肯定长度(差别的数据有变化),就运用变长字符串,比方地点、姓名等。
第 3 类:文本字符串
假如数据量非常大,一般说凌驾 255 个字符就会运用文本字符串。
文本字符串依据存储的花样举行分类,能够分为:
text
:存储笔墨;blob
:存储二进制数据(实在际上都是存储途径),一般不必。
第 4 类:罗列字符串
罗列字符串:enum
,须要事前将一切能够涌现的效果都设计好,现实上存储的数据必需是规定好的数据中的一个。
罗列字符串的运用体式格局:
定义:
enum('元素1','元素2','元素3'...)
,比方enum('男','女','保密')
;运用:存储的数据,只能是事前定义好的数据。
实行以下 SQL 语句竖立罗列表,举行测试:
-- 竖立罗列表create table my_enum( gender enum('男','女','保密') )charset utf8;
再实行以下 SQL 语句,向表my_enum
中插进去测试数据:
-- 插进去测试数据insert into my_enum values ('男'),('女'),('保密');insert into my_enum values ('male');
经由过程上面的测试,我们能够发明运用罗列字符串有一个优点,那就是:范例数据花样,插进去表中的数据只能是事前定义好的某个数据。
另外,罗列字符串另有一个作用,那就是:节约存储空间(罗列数据一般都有一个别号),罗列现实上存储的是数值而不是字符串自身。
在 MySQL 中,体系是有自动转换数据花样的功用的。在这里,我们能够证实罗列字段存储的是数值,细致方法为:将数据取出来+0
,假如是字符串终究效果永远为0
,不然就是其他值。
-- 考证罗列字段现实存储的花样select gender + 0,gender from my_enum;
视察上述效果,我们能够找出罗列元素的现实规律,即依据元素涌现的递次,从1
最先编号。接下来,我们再来相识罗列的道理:
罗列在举行数据范例(定义)的时刻,体系会自动竖立一个数字与罗列元素的对应关联(放在日记中);在举行数据插进去的时刻,体系自动将字符串转换为对应的数值举行存储;在举行数据提取的时刻,体系自动将数值转换成对应的字符串举行显现。
经由过程浏览以上罗列的道理,我们能够晓得:运用罗列的效力并不高(低于其他范例的数据),但能范例数据和节约存储空间。
第 5 类:鸠合字符串
鸠合字符串:set
,跟罗列相似,现实存储的是数值而不是字符串。
鸠合字符串的运用体式格局:
定义:
set
,元素列表;运用:能够运用元素列表中的多个元素,用逗号分开。
实行以下 SQL 语句竖立罗列表,举行测试:
-- 竖立鸠合表create table my_set( hobby set('音乐','影戏','游览','美食','拍照','活动','宠物') )charset utf8;
再实行以下 SQL 语句,向表my_set
中插进去测试数据:
-- 插进去测试数据insert into my_set values ('影戏,美食,宠物');insert into my_set values (3);
再实行以下 SQL 语句,检察表my_set
中的数据:
-- 检察数据select hobby + 0,hobby from my_set;
视察上面的效果,置信大部分童鞋也懵啦!关于3
还好明白,3=2+1
,对应于鸠合中数据的编号,也恰是音乐
和影戏
;然则74
是什么鬼啊?在此,我们无妨将鸠合('音乐','影戏','游览','美食','拍照','活动','宠物'
)中的元素选中的记为1
,没有选中的记为0
,示意成二进制,也就是:
0101001
再将上面的二进制反过来:
1001010
无妨算算,上述二进制对应的十进制数,即为74
.
到这里,置信人人已豁然开朗啦,本来:鸠合字符串中每个元素都对应一个二进制位,个中被选中的为1
,未选中的为0
,末了在反过来,这个二进制数对应的十进制数即为其数据库中现实存储的是数值。
另外,鸠合字符串中插进去元素的递次并没有影响,终究体系都邑自动去婚配鸠合的递次,即:
-- 插进去测试数据insert into my_set values ('影戏,美食,游览');insert into my_set values ('游览,影戏,美食');
上述两个 SQL 语句会发生雷同的效果:
如上图所示,明显我们的结论得到了考证。
末了,鸠合的道理同罗列相似,因而能够的到雷同的结论,即:运用鸠合的效力并不高(低于其他范例的数据),但能范例数据和节约存储空间。
以上就是MySQL 教程之列范例中的字符串型的细致内容,更多请关注ki4网别的相干文章!