mysql非空插入行为

rkue9o1l  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(382)

我目前正在使用MySQL5.5,希望升级到5.6或5.7。然而,我遇到了奇怪的行为(可能是mysql错误或一些全局默认变量)。下面的代码在5.5中运行良好,但在5.6、5.7中不起作用。所以要么5.5有问题,要么我丢失了5.6/5.7的一些设置。

create table null_test( not_null VARCHAR(255) NOT NULL);
insert into null_test values();

正如预期的那样,以下操作不起作用。

insert into null_test values(NULL);

根据一些早期的挖掘,它可能与sql模式有关,特别是er\u no\u default\u for\u字段。
https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-模式已满

v6ylcynt

v6ylcynt1#

这是在较新的mysql版本中默认启用严格sql模式的结果。
禁用严格模式时,忽略声明的列的值 NOT NULL 没有明确的 DEFAULT 值生成警告并假定为自动默认值。为了 VARCHAR ,此自动默认值为空字符串。
启用严格模式时,除非使用 INSERT IGNORE .
没有特定的sql模式可以控制这种行为;如果要关闭此检查,则需要完全禁用严格模式。因为严格模式可能会产生其他不兼容(例如。 ONLY_FULL_GROUP_BY 错误),这可能是处理迁移的最方便的方法。
但是,如果您只想处理这个特定错误,最好的解决方案是在模式中声明一个显式默认值:

create table null_test(not_null VARCHAR(255) NOT NULL DEFAULT '');

相关问题