【发布时间】:2018-11-10 22:39:57
【问题描述】:
我目前正在使用 MySQL 5.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 MODE 有关,尤其是 ER_NO_DEFAULT_FOR_FIELD。
https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html#sql-mode-full
【问题讨论】:
-
可能可以简单地通过明确地给该字段一个默认值来解决。
-
我知道如何解决它。但我试图理解它为什么会发生。还有一个针对 5.5 运行的大型现有应用程序。只是不能更改每个查询以针对新版本的 mysql 进行测试。我知道这是我必须经历的痛苦,但这不是目前的解决方案。
-
您不需要更改应用程序。只需将表格列更改为
DEFAULT '' -
我的意思是在将数据库迁移到较新的服务器版本时,可以更新表定义以指定默认值。我的猜测是,在不可为空的 varchar 字段上可能有一些模糊的服务器设置/选项用于将空值默认为空字符串,但我认为仅更新架构可能会更快。如果添加了这样的选项,并且默认为该状态,则 MySQL 可能正在迁移该隐含行为,或者可能新的优化正在使其成为首选行为。
标签: mysql mysql-5.7 mysql-5.6 mysql-5.5