如何显示每个MySQL枚举都有一个索引值?
实际上,在ENUM列规范中列出的元素被分配了从1开始的索引号。这里的术语“索引”指的是在枚举值列表中的位置,它们与表索引无关。通过以下示例,我们可以展示每个MySQL枚举都有一个索引值-
我们可以通过插入它们的索引号而不是写入值来在ENUM列中插入值。例如,在下面的表中,我们有两个ENUM值'pass'和'fail'。由于'pass'在枚举列表中首先被写入,因此得到索引号'1','fail'的索引号为'2'。现在,我们也可以通过插入索引号来插入值,如下所示-
在上述查询中,我们使用索引号1和2分别表示枚举值pass和fail。
通过插入空字符串而不是枚举值
空字符串的索引值为0。在插入空字符串之前,SQL模式不能是TRADITIONAL、STRICT_TRANS_TABLES或STRICT_ALL_TABLES。通过以下示例,我们可以理解它 −
mysql> SET SESSION sql_mode = ''; Query OK, 0 rows affected (0.00 sec) mysql> Insert into marks(id, name, result) values(105,'Yashraj',''); Query OK, 1 row affected, 1 warning (0.06 sec)登录后复制
mysql> Show warnings; +---------+------+---------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------+ | Warning | 1265 | Data truncated for column 'Result' at row 1 | +---------+------+---------------------------------------------+ 1 row in set (0.00 sec)登录后复制
mysql> Select * from marks; +-----+---------+--------+ | id | Name | Result | +-----+---------+--------+ | 101 | Aarav | Pass | | 102 | Yashraj | Fail | | 103 | Daksh | Pass | | 104 | Shayra | Fail | | 105 | Yash | | +-----+---------+--------+ 5 rows in set (0.00 sec) mysql> Select result+0 As result_index from marks; +--------------+ | result_index | +--------------+ | 1 | | 2 | | 1 | | 2 | | 0 | +--------------+ 5 rows in set (0.01 sec) From the output of above query, it is clear that the index value of the empty string is 0.登录后复制