首页 > 编程笔记 > MySQL笔记 阅读:17

MySQL TEXT类型的用法(附带实例)

MySQL 中的 ENUM 是一个字符串对象,其值为表创建时在列规定中枚举的一列值。

使用 ENUM 对象的语法格式如下:
字段名 ENUM('值1','值2',...,'值n')
其中,“字段名”指将要定义的字段,“值 n”指枚举列表中的第 n 个值。

ENUM 类型的字段在取值时,只能在指定的枚举列表中取,而且一次只能取一个。如果创建的成员中有空格,则其尾部的空格将自动被删除。

ENUM 值在内部用整数表示,并且每个枚举值均有一个索引值:列表值所允许的成员值从 1 开始编号,MySQL 存储的就是这个索引编号。枚举最多可以有 65535 个元素。

例如,定义 ENUM 类型的列 ('first','second','third'),该列可以取的值和每个值的索引如下表所示。

表 1 ENUM类型的取值范围
索引
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 列总有一个默认值:
【实例】创建表 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”不是列表中的值,所以不能进行插入操作。

相关文章