MySQL-TEXT&ENUM&SET类型
大家会不会想,哎呀 ,数据库怎么这么多类型呀,宝宝要哭了
其实不用想多了 数据库得类型比上编程语言得类型种类还是小巫见大巫呢
作为开发人员得话 能操作数据库就可以了 (当然也可以学习一下底层得源码),但就使用而言,数据库是非常简单。
一.TEXT类型
TEXT类型是一种特殊的字符串类型,包括TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,其长度和存储空间的对比下表所示:
各种TEXT类型的区别在于允许的长度和存储空间不同。因此,在这几种TEXT类型中,根据需求选取既能满足需要又节省空间的类型即可。
特别注意:
- 以上各类型无须指定长度!
- 允许的长度是指实际存储的字节数,而不是实际的字符个数,比如假设一个中文字符占两个字节, 那么TEXT 类型可存储 65535/2 = 32767 个中文字符,而varchar(100)可存储100个中文字 符,实际占200个字节,但varchar(65535) 并不能存储65535个中文字符,因为已超出表达范围.
mysql> use test; #选择数据库test mysql> create table text_example(e_text tinytext, v_char varchar(255)); #创建数据库表,e_text 可存储255个字节,v_char可存储255个字符
mysql> insert into char_example values(90个中文字符,90个中文字符); #插入失败,utfmb4 用3个字节表示一个中文汉字,会超出tinytext 保存范围
mysql> insert into char_example values(80个中文字符,100个中文字符); #插入成功
|
实战建议
- 1、 char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。超过255字 节的只能用varchar或者text;
- 2、 varchar可变长度,可以设置最大长度;适合用在长度可变的属性。
- 3、 text不设置长度, 当不知道属性的最大长度时,适合用text, 能用varchar的地方不用text;
- 4、 如果都可以选择,按照查询速度: char最快, varchar次之,text最慢
二.ENUM 和SET类型
1.ENUM类型
ENUM类型又称为枚举类型。在创建表时,ENUM类型的取值范围以列表的形式指定,其基本形式如下:
属性名 ENUM('值1', '值2', …, '值n')
其中,“属性名”参数指字段的名称,“值n”参数表示列表中的第n个值。ENUM类型的值只能取列表中的一个元素。其取值列表中最多能有65535个值。如果数据值列表在255个以内,那么一个字节就够,如果超过255但是小于65535,那么系统采用两个字节保存。列表中的每个值独有一个顺序排列的编号,MySQL中存入的是这个编号,而不是列表中的值。默认编号从1开始!
Enum(‘男’,’女’,‘选择保密’) # ‘男’=>1 ‘女’=>2 ‘选择保密’=> 3
mysql> use test; #选择数据库test mysql> create table enum_example (e_enum enum('男','女','选择保密') ); #创建表 mysql> insert into enum_example values('男'); #插入记录,必须是enum 选项中的值 mysql> insert into enum_example values(1); #插入记录可以用数值表示 mysql>select e_enum + 0 from enum_example; #查询enum 选项对应的整数值 |
如果ENUM类型加上了NOT NULL属性,其默认值为取值列表的第一个元素。如果不加NOT NULL属性,ENUM类型将允许插入NULL,而且NULL为默认值。
2.SET类型
在创建表时,SET类型的取值范围就以列表的形式指定了,其基本形式如下:
属性名 SET('值1', '值2', …, '值n')
其中,属性名参数指字段的名称,“值n”参数表示列表中的第n个值,这些值末尾的空格将会被系统直接删除。其基本形式与ENUM类型一样。SET类型的值可以取列表中的一个元素或者多个元素的组合。取多个元素时,不同元素之间用逗号隔开。SET类型的值最多只能是由64个元素构成的组合。
mysql> use test; #选择数据库test mysql> create table set_example (interest set('足球','追剧','篮球','撩妹') ); #创建表 mysql> insert into set_example values( '足球,撩妹' ); #插入记录,必须是enum 选项中的值 mysql> insert into enum_example values(9); #插入相应位效果等同,9 =>1001 选择1,4 mysql>select interest+0 from set_example; #以整数的方式查询 |
更多的关于数据库我会在下面的文章中陆续的分享,也可以关注‘奇牛学院’
来一起讨论