省略非默认字段时,在MariaDb上插入失败

时间:2017-02-16 09:26:59

标签: php mysql mariadb

表格结构:

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');

原因似乎是缺少默认值。

  • 如果我向表中添加默认值,则插入成功。
  • 如果我将NOT NULL更改为NULL,则插入成功。
  • 如果我在MariaDB 10.1.20上执行此操作,则插入成功。
  • 如果我使用两个字段进行插入,则插入成功。

这有效:

INSERT INTO `setup_int` (`key`,`val`) VALUES ('test',0);

问题是:我可以做些什么(一些设置或其他东西)来使mariadb 10.1.21像以前一样处理这种情况。我现在无法改变所有表格,现在我无法降级。

主要问题是PHP执行的查询返回true,尽管插入失败了!

2 个答案:

答案 0 :(得分:1)

看看这里:https://stackoverflow.com/a/2503938/1973205

然后您可以设置如下变量:https://mariadb.com/kb/en/mariadb/sql-mode/

作为一个纯粹的逻辑事实,查询失败是正确的。

答案 1 :(得分:0)

基本上,您设置的约束条件是val的值不能为NULL,并且因为您尝试将其设置为NULL而失败。

0NULL不同。)

默认值在CREATE期间设置:

CREATE TABLE `setup_int` (
    `key` VARCHAR(50) NOT NULL,
    `val` INT(11) NOT NULL DEFAULT 0,
    PRIMARY KEY (`key`)
)