Mysql在not null字段中插入或更新为null值时不会出错

Mysql在not null字段中插入或更新为null值时不会出错,mysql,null,innodb,insert-update,notnull,Mysql,Null,Innodb,Insert Update,Notnull,我有一张桌子 CREATE TABLE `devicelist` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `ip` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL, `serial` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `networkname` varchar(200) COLLATE utf8_unicode_c


我有一张桌子

CREATE TABLE `devicelist` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `ip` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
  `serial` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  `networkname` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL,
  `login` varchar(130) COLLATE utf8_unicode_ci DEFAULT NULL,
  `password` varchar(130) COLLATE utf8_unicode_ci DEFAULT NULL,
  `peopleid` int(10) unsigned NOT NULL,
  `deviceid` int(10) unsigned NOT NULL,
  `placeid` int(10) unsigned NOT NULL,
  `stationid` int(10) unsigned NOT NULL,
  `place` text COLLATE utf8_unicode_ci,
  `date` date NOT NULL,
  `active` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `placeid` (`placeid`),
  KEY `stationid` (`stationid`),
  KEY `peopleid` (`peopleid`),
  KEY `deviceid` (`deviceid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
正如您所看到的,串行设置为非空
但是当我像这样运行查询时

UPDATE DeviceList SET serial = NULL WHERE id = 1
它输出

1 row affected. ( Query took 0.0079 sec )
为什么要将空字段插入非空字段?
我希望发生错误:D

///******************************编辑

我找到了答案
问题出现在sql_模式下

默认情况下,我的sql\u模式为空
iw通过
将其更改为严格的所有表格

SET GLOBAL sql_mode='STRICT_ALL_TABLES'

它应该而且确实会抛出错误。我猜你在问题中发布的
create table
与实际的表定义不符(考虑到你有一个语法错误-额外的逗号)。

MySQL让我今天很郁闷,所以我只是分享一下我学到的东西

MySQL 5.6默认为
无引擎替换

MySQL 5.7默认为
仅按
分组,
严格的转换表
日期中无零
无零日期
零除法错误
无自动创建用户
无引擎替代

正如MySQL参考手册中所述

MySQL安装程序可以在安装过程中配置SQL模式。例如,mysql\u install\u db在基本安装目录中创建一个名为my.cnf的默认选项文件


我更新了完整的表定义,希望这有助于找到problem@KoSMoS:请仔细检查更新前是否没有
触发器,该触发器可能会动态更改“串行”。@a1ex07我在:D中的生活中没有在mysql中创建任何触发器。是否有任何默认触发器?在phpmyadmin中,它表示“没有要显示的触发器”。@KoSMoS:还有一件事需要尝试:根据服务器的操作系统,mysql中的表名可能区分大小写。因此,
DeviceList
DeviceList
可以是两个不同的表。仔细检查
SHOW CREATE TABLE DeviceList
并查看是否有
serial NOT NULL
存在。。。