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

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,然后设置格式

你可能感兴趣的:(mysql)