枚举值未设置,但不是空



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

解决这个问题不是问题。但是,我愿意首先知道这是怎么发生的,-以确保我不会再得到任何这些,-但到目前为止,我还没有能够重新创建带有空字符串作为值的新条目。

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

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

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 说:

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

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

相关内容

  • 没有找到相关文章

最新更新