未设置枚举值,BUT不为空

时间:2017-07-21 00:45:08

标签: mysql sql enums phpmyadmin null

我在表中有一行是枚举类型,但默认情况下也可以为NULL 空字符串(''不是可能的枚举值之一,然而,经过一段时间后,我发现我认为为null的所有条目实际上都设置为空字符串。

解决这个问题并非如此。但是,我很想知道这首先是怎么发生的 - 为了确保我再也不会得到这些, - 但到目前为止我还没有能够使用空字符串作为值重新创建新条目。

我有什么能够将枚举值既不设置为null也不设置任何可能的值?

1 个答案:

答案 0 :(得分:0)

如果有人试图将值插入不在其定义的值列表中的枚举,并且未强制执行严格模式,则该值将被截断为''

mysql> create table t (e enum('a','b','c'));

mysql> insert into t set e='d';
ERROR 1265 (01000): Data truncated for column 'e' at row 1

mysql> set session sql_mode=''; -- disable strict mode

mysql> insert into t set e='d';
Query OK, 1 row affected, 1 warning (0.01 sec)

mysql> show warnings;
+---------+------+----------------------------------------+
| Level   | Code | Message                                |
+---------+------+----------------------------------------+
| Warning | 1265 | Data truncated for column 'e' at row 1 |
+---------+------+----------------------------------------+

mysql> select * from t;
+------+
| e    |
+------+
|      |
+------+

https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html说:

  

严格模式会在尝试创建超过最大密钥长度的密钥时产生错误。如果未启用严格模式,则会导致警告并将密钥截断为最大密钥长度。

它没有明确说明,但是"超过最大长度"还包括"不是枚举的元素。"