当表在MySQL 5.7上有触发器时,列不能为null

当表在MySQL 5.7上有触发器时,列不能为null,mysql,triggers,mysql-5.7,Mysql,Triggers,Mysql 5.7,我不知道这是预期的行为还是错误,但它似乎不正确。从中使用MySQL5.7.9 摘要:仅当表定义了触发器时,应引发警告的操作(将隐式NULL插入非NULL列)才会引发错误 select @@sql_mode; +------------------------+ | @@sql_mode | +------------------------+ | NO_ENGINE_SUBSTITUTION | +------------------------+ 1 row in s

我不知道这是预期的行为还是错误,但它似乎不正确。从中使用MySQL
5.7.9

摘要:仅当表定义了触发器时,应引发警告的操作(将隐式
NULL
插入
非NULL
列)才会引发错误

 select @@sql_mode;
+------------------------+
| @@sql_mode             |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)

show global variables like 'sql_mode';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| sql_mode      | NO_ENGINE_SUBSTITUTION |
+---------------+------------------------+
1 row in set (0.00 sec)

show variables like 'sql_mode';
+---------------+------------------------+
| Variable_name | Value                  |
+---------------+------------------------+
| sql_mode      | NO_ENGINE_SUBSTITUTION |
+---------------+------------------------+
1 row in set (0.00 sec)

create table _test (col_1 varchar(20) not null, col_2 varchar(20) not null) engine=myisam charset=utf8;
Query OK, 0 rows affected (0.00 sec)

show columns from _test;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| col_1 | varchar(20) | NO   |     | NULL    |       |
| col_2 | varchar(20) | NO   |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

 insert into _test (col_1) values ('abc');
Query OK, 1 row affected, 1 warning (0.00 sec)

^^^^^^^^^ This is expected behaviour ^^^^^^^^^

delimiter $$

create trigger `insert_test` before insert on `_test` for each row begin set NEW.col_1 = concat(NEW.col_1, '+test'); end$$
Query OK, 0 rows affected (0.02 sec)

delimiter ;

insert into _test (col_1) values ('abc');
ERROR 1048 (23000): Column 'col_2' cannot be null

^^^^^^^^^ This is UNexpected behaviour ^^^^^^^^^
因此,当设置触发器时,相同模式下的相同命令具有不同的结束状态

是否有人看到了其中的错误,是否有人经历过类似的错误,或者这是版本中的错误

更新 在
5.6.19
(同样在Ubuntu 14.04上)中测试了相同的过程后,最后一行返回:

insert into _test (col_1) values ('abc');
Query OK, 1 row affected, 1 warning (0.01 sec)
这再一次成为了人们期待的行为

更新2
这已提交给MySQL开发团队,目前处于验证状态。

因此
col_2
从未实际设置,但
不为NULL
,因此MySQL抱怨是对的!?提出错误是不对的;如果
sql\u mode
值没有
strict\u trans\u表,则应发出警告。此外,它不会在第一个实例中引发错误,而是引发警告。它只在表有触发器时才会引发错误。不确定这是否相关,但我确实注意到了以下段落:“MySQL存储创建触发器时生效的sql_模式系统变量设置,并始终在该设置生效的情况下执行触发器正文,而不管触发器开始执行时的当前服务器sql模式如何。“有趣;我想知道是否有可能看到这一点。虽然在复制过程中,所有命令都以相同的模式运行。看起来表中有一个
SQL\u mode
列可能值得一看