【发布时间】:2011-06-09 00:17:35
【问题描述】:
我目前正在尝试为 CodeIgniter 使用对象关系映射器,但我遇到了一些我没有预料到的事情。
我有一个包含几个字段的表,其中一些不是 NULL。生成一个缺少 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
这是一个示例查询:
INSERT INTO `test` (`shape`) VALUES ('foo')
我的查询中没有 size,但它仍然添加了行 - 这是预期的吗?
(示例查询在 phpMyAdmin 中运行)
【问题讨论】:
-
请编辑您的问题以包含来自
SHOW CREATE TABLE (table_name)的输出 -
写入的是 NULL 还是空字符串?空字符串将通过 NOT NULL 约束。
-
NOT NULL确保存储的值永远不会是NULL,但字符串“NULL”不是一回事。NULL只是一个占位符,表示缺少任何值... -
@AJ @Thomas @OMGPonnies 我已经编辑了我的问题。如果您希望我澄清任何事情,请告诉我。谢谢
-
@RS7:当我在 MySQL 5.1.49 上测试时,您在
Error 1364: Field "size" doesn't have a default value中发布的结果表和插入。这个错误是我对几乎任何数据库的期望......
标签: mysql sql codeigniter insert