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 所以报错了
------解决方案--------------------
这个默认值只有在你不insert这个status才会起作用
把status赋值为null 和补给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或者之类的框架了,建议多了解它们的机制…