mysql 5.5.4版本关于not null设置的区别

在MySQL 5.5.4的不同环境下,NOT NULL约束对update_time字段的行为存在差异。Windows环境下允许插入不包含update_time的记录,产生警告但能成功插入;而Linux环境下则会因为缺少默认值导致插入失败。解决办法是为字段提供默认值,如0(针对int类型)或空字符串(针对字符串类型)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql版本5.5.4

Create Table

CREATE TABLE `menu` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL COMMENT '菜单名称',
  `parent_id` int(10) NOT NULL COMMENT '菜单父类id',
  `controller` varchar(100) NOT NULL COMMENT '控制器',
  `action` varchar(100) NOT NULL COMMENT '方法',
  `add_time` int(10) NOT NULL,
  `update_time` int(10) NOT NULL,
  `icon` varchar(30) NOT NULL COMMENT 'bootstrap的图标,一级菜单添加',
  `mark` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=69 DEFAULT CHARSET=utf8 COMMENT='菜单表'
建表语句,

window环境下update_time为 not null,没有默认值

执行sql

INSERT INTO `menu` (`id`,`name`,`controller`,`action`,`icon`,`parent_id`,`add_time`) VALUES ('0','鑿滃崟鍚嶇О','鎺у埗鍣�','鏂规硶鍚�','1212','0','1446017793')

有警告

Warning Code : 1364
Field 'update_time' doesn't have a default value

但是还是可以插入成功



linux环境下,mysql版本5.5.44

CREATE TABLE `bannel` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `url` text NOT NULL COMMENT 'bannel路径',
  `add_time` int(10) unsigned NOT NULL,
  `update_time` int(10) unsigned NOT NULL,
  `type` int(1) unsigned NOT NULL DEFAULT '1' COMMENT '1:专题的bannel',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
update_time 设置为not null ,没有默认值

插入

insert into `bannel` (`id`, `url`, `add_time`, `type`) values (0, '111', '123', '1')


错误代码: 1364
Field 'update_time' doesn't have a default value

报错,没有插入成功


分析原因:

参考文档:http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

建议

1:字段设置为not null 可以给一个默认值,int类型的可以为0,字符串类型的可以设置为空字符串“”,或者时间格式的可以设置为timestamp,然后设置格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值