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