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 中运行)
鉴于问题的测试 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
| 归档时间: |
|
| 查看次数: |
4317 次 |
| 最近记录: |