【发布时间】:2017-02-16 09:26:59
【问题描述】:
表结构:
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虽然插入失败!
【问题讨论】:
-
我看不出这里有什么问题。如果您设置一个表并告诉它
val不能为NULL,那么您必须在每次插入时为val提供一个值。因此,如果您无法提供该值,请删除NOT NULL或添加 DEFAULT -
@RiggsFolly 我同意,这种行为似乎是正常的和意料之中的。
-
如果在 10.1.20 中将
val留空,那么 10.1.20 中肯定存在错误,因此恢复意味着您可以再次升级数据库 -
是的,我同意,但它与以前的行为不同。
-
请显示缺少的 PHP 代码。您使用哪种 API,PDO、MySQLi、...