MySQL 插入查询缺少非空字段

RS7*_*RS7 0 mysql sql codeigniter insert

我目前正在尝试使用 CodeIgniter 的对象关系映射器,但我遇到了一些我没有预料到的事情。

我有一个包含几个字段的表,其中一些字段不为空。生成缺少 NOT NULL 字段的插入查询 - 添加一个新行,但这些字段为空白。

我不知道 MySQL 会忽略查询中不存在的 NOT NULL 字段并无论如何插入该行。有没有办法限制这个?

-编辑-

让我添加更多细节并尝试对其进行更多解释

这是一个示例表:

CREATE TABLE `test` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `color` varchar(40) COLLATE utf8_bin DEFAULT '',
 `shape` varchar(40) COLLATE utf8_bin NOT NULL,
 `size` varchar(40) COLLATE utf8_bin NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin
Run Code Online (Sandbox Code Playgroud)

这是一个示例查询:

INSERT INTO `test` (`shape`) VALUES ('foo')
Run Code Online (Sandbox Code Playgroud)

我的查询中没有size,但它仍然添加该行 - 这是预期的吗?

(示例查询在 phpMyAdmin 中运行)

pet*_*tys 6

鉴于问题的测试 INSERT 语句,我认为接受的答案是不正确的。在我看来,MySQL 的“严格模式”已针对该表或数据库关闭。来自文档

严格模式控制 MySQL 如何处理无效或缺失的输入值...当要插入的新行不包含定义中没有显式 DEFAULT 子句的非 NULL 列的值时,就会缺少值...

如果您没有使用严格模式(即,STRICT_TRANS_TABLES 和 STRICT_ALL_TABLES 均未启用),MySQL 会插入无效或缺失值的调整值并产生警告。

您可以通过以下查询了解数据库的运行情况:

SELECT @@global.sql_mode;
SELECT @@session.sql_mode;
Run Code Online (Sandbox Code Playgroud)

此处讨论更改这些值:https ://stackoverflow.com/a/5273824/27846