表结构:
CREATE TABLE `setup_int` (
`key` VARCHAR(50) NOT NULL,
`val` INT(11) NOT NULL,
PRIMARY KEY (`key`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
您可以看到字段是 NOT NULL
-fields且没有默认值。
我们已更新为Mariadb 10.1.21,现在有以下问题:以下查询失败而没有任何错误消息!
INSERT INTO `setup_int` (`key`) VALUES ('test');
原因似乎是缺少的默认值。
- 如果我在表中添加默认值,则插入成功。
- 如果将
NOT NULL
更改为NULL
,则插入成功。 - 如果我在Mariadb 10.1.20上这样做,则插入成功。
- 如果我使用两个字段进行插入,则插入成功。
这有效:
INSERT INTO `setup_int` (`key`,`val`) VALUES ('test',0);
问题是:我该怎么办(某些设置或其他设置)使Mariadb 10.1.21像以前一样处理这种情况。我现在无法更改所有桌子,我现在无法降级。
主要问题是PHP执行的查询返回true
,尽管插入失败了!
在这里查看:https://stackoverflow.com/a/a/2503938/1973205
然后您可以设置这样的变量:https://mariadb.com/kb/en/mariadb/sql-mode/
作为纯粹的逻辑事实,查询失败是正确的。
基本上,您设置了一个约束,即val
的值不得为NULL
,并且由于尝试将其设置为NULL
。
(0
与NULL
不同。)
默认值是在CREATE
期间设置的:
CREATE TABLE `setup_int` (
`key` VARCHAR(50) NOT NULL,
`val` INT(11) NOT NULL DEFAULT 0,
PRIMARY KEY (`key`)
)