省略非默认字段时,在 MariaDb 上插入失败
Insert on MariaDb fails when ommitting non-default fields
Table结构:
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
-字段并且没有默认值。
我们更新到 MariaDB 10.1.21,现在有以下问题:
以下查询失败且没有任何错误消息!
INSERT INTO `setup_int` (`key`) VALUES ('test');
原因似乎是缺少默认值。
- 如果我给table添加一个默认值,插入就成功了。
- 如果我将
NOT NULL
更改为 NULL
,则插入成功。
- 如果我在 MariaDB 10.1.20 上执行,则插入成功。
- 如果我对两个字段都进行插入,则插入成功。
这个有效:
INSERT INTO `setup_int` (`key`,`val`) VALUES ('test',0);
问题是:我能做些什么(一些设置,或其他)让 mariadb 10.1.21 像以前一样处理这种情况。我现在无法更改所有 table,我现在也无法降级。
主要问题是PHPreturnstrue
执行的查询虽然插入失败了!
看这里:
然后你可以这样设置变量: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`)
)
Table结构:
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
-字段并且没有默认值。
我们更新到 MariaDB 10.1.21,现在有以下问题: 以下查询失败且没有任何错误消息!
INSERT INTO `setup_int` (`key`) VALUES ('test');
原因似乎是缺少默认值。
- 如果我给table添加一个默认值,插入就成功了。
- 如果我将
NOT NULL
更改为NULL
,则插入成功。 - 如果我在 MariaDB 10.1.20 上执行,则插入成功。
- 如果我对两个字段都进行插入,则插入成功。
这个有效:
INSERT INTO `setup_int` (`key`,`val`) VALUES ('test',0);
问题是:我能做些什么(一些设置,或其他)让 mariadb 10.1.21 像以前一样处理这种情况。我现在无法更改所有 table,我现在也无法降级。
主要问题是PHPreturnstrue
执行的查询虽然插入失败了!
看这里:
然后你可以这样设置变量: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`)
)