日期:2014-05-18  浏览次数:20706 次

mysql 字段默认值的保存问题,java
CREATE TABLE `zsj_message` (
  `message_id` int(11) NOT NULL auto_increment,
  `title` varchar(255) NOT NULL default '',
  `content` mediumtext NOT NULL,
  `time` timestamp NOT NULL default CURRENT_TIMESTAMP,
  `status` int(11) default NOT NULL '0',
  `telephone` varchar(20) NOT NULL default '',
  `name` varchar(4) NOT NULL default '',
  `email` varchar(45) NOT NULL default '',
  PRIMARY KEY  (`message_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

以上是我的数据表结构,我在jsp页面保存记录到mysql数据库中时,java日志出错,提示:status的值不能为空(jsp页面没有填写status相关内容)。
作如下修改(只是把status字段中的 not null 去掉)
把]`status` int(11) default NOT NULL '0',改成`status` int(11) default '0',其它不变
保存时不会提示错误,其它值都可以正常保存,就是status的值为空,也就是无法把默认值保存到mysql数据库表中,不知道这些是什么原因造成的。
希望大家帮忙解答下,谢谢。
mysql java

------解决方案--------------------
default只有字段没有插入内容时才起作用。你执行两个insert语句就懂了,一个给status字段赋值,一个不给status字段赋值(不是插入空的字符串)
------解决方案--------------------
你的sql是这样的  insert (status) values(null)

因为status不能为null  所以报错了
------解决方案--------------------
引用:
引用:你的sql是这样的  insert (status) values(null)

因为status不能为null  所以报错了


不是很理解,我已经在mysql表中的字段设定了默认值,应该是自动把默认值赋给status,不知道为何status是null值。


这个默认值只有在你不insert这个status才会起作用

把status赋值为null  和补给status赋值时有区别的
------解决方案--------------------
引用:
引用:引用:
引用:你的sql是这样的  insert (status) values(null)

因为status不能为null  所以报错了


不是很理解,我已经在mysql表中的字段设定了默认值,应该是自动把默认值赋给status,不知道为何……

楼主,保存数据时你可以把你的SQL语句打印出来,然后对比下面两个语句的执行效果…
insert into ('message_id','titile','content','time','status','telephon','name','email') 
values
(1000,'1','1','2013-04-07 17:02:01','','1','1','1');

insert into 
('message_id','titile','content','time','telephon','name','email') 
values
(2000,'2','2','2013-04-07 17:02:01','2','2','2');

PS:如果楼主使用hibernate或者之类的框架了,建议多了解它们的机制…