MySQL TEXT类型的用法(附带实例)
MySQL 中的 ENUM 是一个字符串对象,其值为表创建时在列规定中枚举的一列值。
使用 ENUM 对象的语法格式如下:
ENUM 类型的字段在取值时,只能在指定的枚举列表中取,而且一次只能取一个。如果创建的成员中有空格,则其尾部的空格将自动被删除。
ENUM 值在内部用整数表示,并且每个枚举值均有一个索引值:列表值所允许的成员值从 1 开始编号,MySQL 存储的就是这个索引编号。枚举最多可以有 65535 个元素。
例如,定义 ENUM 类型的列 ('first','second','third'),该列可以取的值和每个值的索引如下表所示。
ENUM 值依照列索引顺序排列,并且空字符串排在非空字符串前,NULL 排在其他所有的枚举值前,这一点也可以从表 1 中看到。
在这里,有一个方法可以查看列成员的索引值。例如创建表 tmp9,定义 ENUM 类型的列 enm('first', 'second', 'third'),查看列成员的索引值。
1) 创建表 tmp9:
2) 插入各个列值:
3) 查看索引值:
ENUM 列总有一个默认值:
【实例】创建表 tmp10,定义 INT 类型的字段 soc,ENUM 类型的字段 level,并且取值列表为 ('excellent','good', 'bad'),向表 tmp10 中插入数据 (70,'good')、(90,1)、(75,2)、(50,3)、(100,'best')。
1) 创建数据表:
2) 插入数据:
3) 再次插入数据:
4) 查询插入结果:
使用 ENUM 对象的语法格式如下:
字段名 ENUM('值1','值2',...,'值n')其中,“字段名”指将要定义的字段,“值 n”指枚举列表中的第 n 个值。
ENUM 类型的字段在取值时,只能在指定的枚举列表中取,而且一次只能取一个。如果创建的成员中有空格,则其尾部的空格将自动被删除。
ENUM 值在内部用整数表示,并且每个枚举值均有一个索引值:列表值所允许的成员值从 1 开始编号,MySQL 存储的就是这个索引编号。枚举最多可以有 65535 个元素。
例如,定义 ENUM 类型的列 ('first','second','third'),该列可以取的值和每个值的索引如下表所示。
值 | 索引 |
---|---|
NULL | NULL |
" | 0 |
first | 1 |
second | 2 |
third | 3 |
ENUM 值依照列索引顺序排列,并且空字符串排在非空字符串前,NULL 排在其他所有的枚举值前,这一点也可以从表 1 中看到。
在这里,有一个方法可以查看列成员的索引值。例如创建表 tmp9,定义 ENUM 类型的列 enm('first', 'second', 'third'),查看列成员的索引值。
1) 创建表 tmp9:
CREATE TABLE tmp9( enm ENUM('first','second','third') );
2) 插入各个列值:
INSERT INTO tmp9 values('first'),('second') ,('third') , (NULL);
3) 查看索引值:
mysql> SELECT enm, enm+0 FROM tmp9; +-------+-------+ | enm | enm+0 | +-------+-------+ | first | 1 | | second| 2 | | third | 3 | | NULL | NULL | +-------+-------+可以看到,这里的索引值和表 1 中的相同。
ENUM 列总有一个默认值:
- 如果将 ENUM 列声明为 NULL,则 NULL 为该列的一个有效值,并且默认值为 NULL;
- 如果 ENUM 列被声明为 NOT NULL,其默认值为允许的值列表中的第 1 个元素。
【实例】创建表 tmp10,定义 INT 类型的字段 soc,ENUM 类型的字段 level,并且取值列表为 ('excellent','good', 'bad'),向表 tmp10 中插入数据 (70,'good')、(90,1)、(75,2)、(50,3)、(100,'best')。
1) 创建数据表:
CREATE TABLE tmp10 (soc INT, level enum('excellent', 'good','bad') );
2) 插入数据:
INSERT INTO tmp10 values(70,'good'), (90,1),(75,2),(50,3);
3) 再次插入数据:
mysql>INSERT INTO tmp10 values (100,'best'); ERROR 1265 (01000): Data truncated for column 'level' at row 1这里系统提示错误信息,可以看到,由于字符串值'best'不在 ENUM 列表中,因此阻止将它插入表中。
4) 查询插入结果:
mysql>SELECT * FROM tmp10; +-----+-----------+ | soc | level | +-----+-----------+ | 70 | good | | 90 | excellent | | 75 | good | | 50 | bad | +-----+-----------+由结果可以看到,因为 ENUM 列表中的值在 MySQL 中都是以编号序列存储的,所以插入列表中的值“good”与插入其对应序号“2”的结果是相同的,而“best”不是列表中的值,所以不能进行插入操作。