为什么这个库中要求所有字段都有内容才能插入新记录或更新? 本帖最后由 freeqiong 于 2011-01-15 00:23:09 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主贴一个message表就够了,`f_id` int(11) NOT NULL 你这个字段显示是not null 而你插入为空,数据库会报错的,是不是这个问题? 很简单,注意你贴出的文本中的第一句 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";把这个去掉。或者直接执行SET SQL_MODE=‘’; NO_AUTO_VALUE_ON_ZERONO_AUTO_VALUE_ON_ZERO影响AUTO_INCREMENT列的处理。一般情况,你可以向该列插入NULL或0生成下一个序列号。NO_AUTO_VALUE_ON_ZERO禁用0,因此只有NULL可以生成下一个序列号。如果将0保存到表的AUTO_INCREMENT列,该模式会很有用。(不推荐采用该惯例)。例如,如果你用mysqldump转储表并重载,MySQL遇到0值一般会生成新的序列号,生成的表的内容与转储的表不同。重载转储文件前启用NO_AUTO_VALUE_ON_ZERO可以解决该问题。mysqldump在输出中自动包括启用NO_AUTO_VALUE_ON_ZERO的语句。狼头哥这么迟了还没休息 把这一行去掉SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; 现在我把数据表做了修改,比如:---- 表的结构 `user`--CREATE TABLE `user` ( `u_id` int(11) NOT NULL auto_increment COMMENT '用户ID', `is_mask` tinyint(1) default '0' COMMENT '是否被屏蔽', `s_num` int(11) default NULL COMMENT '顺序号', `u_name` varchar(20) collate utf8_bin NOT NULL COMMENT '用户登录名', `cn_name` varchar(40) collate utf8_bin NOT NULL COMMENT '用户中文名', `u_password` varchar(32) collate utf8_bin NOT NULL COMMENT '用户密码', `group` int(3) NOT NULL COMMENT '群组', `u_rights` int(2) NOT NULL COMMENT '用户权限', `u_re` varchar(255) collate utf8_bin default NULL COMMENT '备注', `u_jointime` int(10) default NULL COMMENT '最后登录时间', PRIMARY KEY (`u_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=65 ;可是我还是不能用以下sql语句插入数据,因为is_mask字段没有得到数据,可是我不是已经设置了这个字段可以为NULL,且默认值为0了吗?INSERT INTO `user` (`s_num`,`u_name`,`cn_name`,`u_password`,`is_mask`,`group`,`u_rights`,`u_re`,`u_jointime`) VALUES ('64','zs','张三','aaa','','1','5','zs','1295358581') 贴出你 show create table ... 还有你的insert into之后的完整错误信息以供别人分析。问题说明越详细,回答也会越准确!参见如何提问。(提问的智慧) 我试了下;会报一个warning;原因就是你的is_mask是int类型,而你的''是一个空的字符串.会报错,既然这个字段已经有默认值了,而楼主又不会给这个字段赋值.为什么不改成:INSERT INTO `user` (`s_num`,`u_name`,`cn_name`,`u_password`,`group`,`u_rights`,`u_re`,`u_jointime`) VALUES ('64','zs','张三','aaa','1','5','zs','1295358581') 这样?不显示出is_mask字段; 回楼上两位,user表的结构我不是在10楼给出了吗?而且php里面执行完只是没有效果,并没有错误提示。服务器上没有装phpmyadmin,我不太清楚该怎么看错误提示。 并不是不会给这个字段赋值,而是有时候要赋值,有时候不需要。另外我给它一个''是想让它按默认值插入。另,这个情况很奇怪,在我本机的mysql上只要给''就会自动根据字段类型插入数值,int型就是0。 但是在服务器上的mysql却不会这样。是不是mysql哪里设置不同造成的? 这个应用就好像一个注册表单,里面有很多输入框,有些是必填的,有些是选填的。那么当一些框没有填的时候该怎么写sql? 你自己手动输入好了.要是想''的话就把''变成0;为什么会这样,可能就是楼上说的SQL_MODE的问题.. 【不懂就问】 Mysql 自定义函数的问题 跨库查询 mysql怎么取得当月所有日期、星期 mysql count函数的使用问题 Mysql与VC连接出错 mysql大数据量处理,求助 急寻数据库!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1 SQL语句中[]的问题 急啊,日期问题 如何查看所有被赋值的变量 求SQL:MySQL下如何先order by 在group by,不使用subSelect? FROM_UNIXTIME 问题
楼主贴一个message表就够了,`f_id` int(11) NOT NULL 你这个字段显示是not null 而你插入为空,数据库会报错的,是不是这个问题?
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";把这个去掉。
或者直接执行SET SQL_MODE=‘’;
狼头哥这么迟了还没休息
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- 表的结构 `user`
--CREATE TABLE `user` (
`u_id` int(11) NOT NULL auto_increment COMMENT '用户ID',
`is_mask` tinyint(1) default '0' COMMENT '是否被屏蔽',
`s_num` int(11) default NULL COMMENT '顺序号',
`u_name` varchar(20) collate utf8_bin NOT NULL COMMENT '用户登录名',
`cn_name` varchar(40) collate utf8_bin NOT NULL COMMENT '用户中文名',
`u_password` varchar(32) collate utf8_bin NOT NULL COMMENT '用户密码',
`group` int(3) NOT NULL COMMENT '群组',
`u_rights` int(2) NOT NULL COMMENT '用户权限',
`u_re` varchar(255) collate utf8_bin default NULL COMMENT '备注',
`u_jointime` int(10) default NULL COMMENT '最后登录时间',
PRIMARY KEY (`u_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=65 ;可是我还是不能用以下sql语句插入数据,因为is_mask字段没有得到数据,可是我不是已经设置了这个字段可以为NULL,且默认值为0了吗?INSERT INTO `user` (`s_num`,`u_name`,`cn_name`,`u_password`,`is_mask`,`group`,`u_rights`,`u_re`,`u_jointime`) VALUES ('64','zs','张三','aaa','','1','5','zs','1295358581')
我试了下;会报一个warning;原因就是你的is_mask是int类型,而你的''是一个空的字符串.会报错,既然这个字段已经有默认值了,而楼主又不会给这个字段赋值.为什么不改成:
INSERT INTO `user` (`s_num`,`u_name`,`cn_name`,`u_password`,`group`,`u_rights`,`u_re`,`u_jointime`) VALUES ('64','zs','张三','aaa','1','5','zs','1295358581')
这样?
不显示出is_mask字段;
并不是不会给这个字段赋值,而是有时候要赋值,有时候不需要。另外我给它一个''是想让它按默认值插入。
另,这个情况很奇怪,在我本机的mysql上只要给''就会自动根据字段类型插入数值,int型就是0。 但是在服务器上的mysql却不会这样。是不是mysql哪里设置不同造成的?