Rey*_*rPM 2 mariadb null insert update
我有这个表定义:
CREATE TABLE `media` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`brands_id` int(11) DEFAULT NULL,
`media_type` varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
`title` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
`description` longtext COLLATE utf8_unicode_ci NOT NULL,
`thumbnail_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`media_url` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`media_code` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
`inactive` tinyint(1) NOT NULL,
`createdAt` datetime NOT NULL,
`updatedAt` datetime NOT NULL,
`titleHtml` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
`descriptionHtml` longtext COLLATE utf8_unicode_ci NOT NULL,
`useHtml` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UNIQ_6A2CA10CBF396750` (`id`),
KEY `IDX_6A2CA10CE9EEC0C7` (`brands_id`),
CONSTRAINT `FK_6A2CA10CE9EEC0C7` FOREIGN KEY (`brands_id`) REFERENCES `brands` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ROW_FORMAT=COMPACT;
Run Code Online (Sandbox Code Playgroud)
每次我尝试插入新记录时,由于NOT NULL
约束,我都会收到一个错误,没关系,现在如果我尝试更新同一条记录并且我将title
和/description
或任何其他必填字段留空,则执行 UPDATE 并且该列是设置为空白,为什么?我怎样才能避免这种情况?我正在使用 MariaDB 5.5.46。
更新
根据主持人的要求,下面是我尝试过的 INSERT 和 UPDATE 查询:
INSERT INTO media (media_type, title, titleHtml, description, descriptionHtml, thumbnail_url, media_url, media_code, inactive, useHtml, createdAt, updatedAt, brands_id) VALUES (null,"Media Title Test",null,null,null,"https://someurl",null,null,false,false,"2015-10-22 22:07:54","2015-10-22 22:07:54",null)
Run Code Online (Sandbox Code Playgroud)
上面的 INSERT 失败,因为数据库中的 CONSTRAINTS
UPDATE media SET description = null, updatedAt = "2015-10-22 22:12:18" WHERE id = 13
Run Code Online (Sandbox Code Playgroud)
上面的 UPDATE 通过,这是问题,因为description
不允许列具有 NULL 值
小智 6
问题出在您的数据库配置中。MariaDB 默认情况下 SQL_MODE 不是 STRICT 和 UPDATEs,即使它设置为 NOT NULL。
但这是一个指向答案的指针:
至少启用 STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES 之一的模式称为严格模式。如果未设置严格模式(默认),MariaDB 会自动调整无效值,例如截断过长的字符串,或调整超出范围的数值,并产生警告。
设置严格模式后,语句将失败,并返回错误。当设置严格模式以将错误转换为警告时,可以使用 IGNORE 关键字。
因此,您需要按照以下说明设置适当的 SQL_MOD:https ://mariadb.com/kb/en/mariadb/sql_mode/
归档时间: |
|
查看次数: |
1485 次 |
最近记录: |