2核1G3M服务器88一季度

腾讯云,阿里云百度云等 折扣价→点我←

Mysql Field * doesn't have a default value解决方法 discuz 教程

8号当铺 一级用户组

MySQL 5中,出现错误提示:
Field 'id' doesn't have a default value

解决方法一[推荐]:

打开my.ini,查找
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

修改为

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后重启MYSQL


解决方法二:
MySQL 5 uses a strict mode which needs to be disabled.
In Windows, Goto Start-->Programs-->MySQL->MySQL Instance Config Wizard. Follow through the Reconfigure Instance option-->Detailed Configuration-->Continue Next a few screens. At the bottom under Enable TCP/IP option there is 'Enable Strict Mode'. Deslect this option (no tick). Save changes and MySQL will restart

  原来在MySQL 5.0.2之前,MySQL对非法或不当值并不严厉,而且为了数据输入还会强制将它们变为合法值。在MySQL 5.0.2和更高版本中,保留了以前的默认行为,但你可以为不良值选择更传统的处理方法,从而使得服务器能够拒绝并放弃出现不良值的语句。本节介绍了MySQL的默认行为(宽大行为),新的严格的SQL模式,以及它们的区别。
  如果你未使用严格模式,下述情况是真实的。如果将“不正确”的值插入到列,如将NULL值插入非NULL列,或将过大的数值插入数值列,MySQL会将这些列设置为“最可能的值”,而不是生成错误信息。
  · 如果试图将超范围的值保存到数值列,MySQL服务器将保存0(最小的可能值)取而代之,或最大的可能值。
  · 对于字符串,MySQL或保存空字符串,或将字符串尽可能多的部分保存到列中。
  · 如果打算将不是以数值开头的字符串保存到数值列,MySQL将保存0。
  · MySQL允许将特定的不正确日期值保存到DATE和DATETIME列(如“2000-02-31”或“2000-02-00”)。其观点在于,验证日期不是SQL服务器的任务。如果MySQL能保存日期值并准确检索相同的值,MySQL就能按给定的值保存它。如果日期完全不正确(超出服务器能保存的范围)将在列中保存特殊的日期值“0000-00-00”取而代之。
  · 如果试图将NULL值保存到不接受NULL值的列,对于单行INSERT语句,将出现错误。对于多行INSERT语句或INSERT INTO ... SELECT语句,MySQL服务器会保存针对列数据类型的隐含默认值。一般情况下,对于数值类型,它是0,对于字符串类型,它是空字符串(''),对于日期和时间类型是“zero”。
  · 如果INSERT语句未为列指定值,如果列定义包含明确的DEFAULT子句,MySQL将插入默认值。如果在定义中没有这类DEFAULT子句,MySQL会插入列数据类型的隐含默认值。
  采用前述规则的原因在于,在语句开始执行前,无法检查这些状况。如果在更新了数行后遇到这类问题,我们不能仅靠回滚解决,这是因为存储引擎可能不支持回滚。中止语句并不是良好的选择,在该情况下,更新完成了“一半”,这或许是最差的情况。对于本例,较好的方法是“仅可能做到最好”,然后就像什么都未发生那样继续。
  在MySQL 5.0.2和更高版本中,可以使用STRICT_TRANS_TABLES或STRICT_ALL_TABLES SQL模式,选择更严格的处理方式。
  STRICT_TRANS_TABLES的工作方式:
  · 对于事务性存储引擎,在语句中任何地方出现的不良数据值均会导致放弃语句并执行回滚。
  · 对于非事务性存储引擎,如果错误出现在要插入或更新的第1行,将放弃语句。(在这种情况下,可以认为语句未改变表,就像事务表一样)。首行后出现的错误不会导致放弃语句。取而代之的是,将调整不良数据值,并给出告警,而不是错误。换句话讲,使用STRICT_TRANS_TABLES后,错误值会导致MySQL执行回滚操作,如果可以,所有更新到此为止。
  要想执行更严格的检查,请启用STRICT_ALL_TABLES。除了非事务性存储引擎,它与STRICT_TRANS_TABLES等同,即使当不良数据出现在首行后的其他行,所产生的错误也会导致放弃语句。这意味着,如果错误出现在非事务性表多行插入或更新过程的中途,仅更新部分结果。前面的行将完成插入或更新,但错误出现点后面的行则不然。对于非事务性表,为了避免这种情况的发生,可使用单行语句,或者在能接受转换警告而不是错误的情况下使用STRICT_TRANS_TABLES。要想在第1场合防止问题的出现,不要使用MySQL来检查列的内容。最安全的方式(通常也较快)是,让应用程序负责,仅将有效值传递给数据库。
  有了严格的模式选项后,可使用INSERT IGNORE或UPDATE IGNORE而不是不带IGNORE的INSERT或UPDATE,将错误当作告警对待。


站长窝论坛版权声明 1、本帖标题:Mysql Field * doesn't have a default value解决方法
2、论坛网址:站长窝论坛
3、站长窝论坛的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
4、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
5、站长窝论坛一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本帖由8号当铺在站长窝论坛《程序综合区》版块原创发布, 转载请注明出处!
评论
最新回复 (0)
  • 丰斌啉 一级用户组
    引用 2

    某天上课,班主任拉肚子,上课一直在放屁,同学们都憋出了内伤,这时带着耳机的同桌突然抬起头来大喊:“谁tm吃屎了,放这么凶残的屁!”然后………他就和我说今天走廊上真冷……
    从前有个叫马騳骉的人,但是博学多才的老师也不知怎么念,所以每当上课点名的时候,总爱说马叉叉到了没。后来,一位有文学素养的语文老师点名道:“万马奔腾到了没?”再后来,一位体育老师直接改用:“一群马到了没?”
    股票实时数据[media=x,500,375]2017qiqlq10.cn/sjzx/[/media]
    股票市场趋势分析[media=x,500,375]2017qiqlq10.cn/scyj/[/media]
    金字塔零点娱乐[media=x,500,375]2017qiqlq10.cn/jinzitayulecheng/[/media]
    老婆:“早点睡吧!今天我太累了,不和你多聊了...”老公:“我怎么听,屋里还有别人动静呢!”老婆:“你出差!我一个人寂寞,叫闺蜜(小雪)过来陪我;怎么地!不相信我呀!要不,我叫闺蜜跟你说两句!”老公:“不用了!老婆!我相信你,早点睡吧!”放下电话后,老公看着身边老婆的闺蜜(小雪),抽了一宿的烟……
    澳门零点金少娱乐[media=x,500,375]2017iuemv52.cn/amjsdc/[/media]
    金三角令点娱乐[media=x,500,375]2017hqlak9.cn/jsjylc/[/media]
    昨晚女朋友生日,我竟然忘了。灵机一动,我马上拿出打火机点燃,对她说生日快乐!叫她快吹灭,她听了直接一巴掌,说到你忘了就算了,你特么还拿个防风的火机几个意思 ?
    澳门零点金少娱乐[media=x,500,375]2017iuemv52.cn/amjsdc/[/media]
    股票市场趋势分析[media=x,500,375]2017qiqlq10.cn/scyj/[/media]
    有一次和朋友们吃饭,结果众人皆醉,唯我独醒,不是我请客啊。没办法,只能我结账了。又一次一起吃饭,这次我变精明了!吃的快差不多的时候我装醉了,结果我惊愕的发现这群贱人在掏老子钱包。你们怎么不去死啊!
    2015/01/21 11:30:10 只看Ta 回复
返回
发新帖