#1292 - 日期值不正确: '0000-00-00'

54

我查阅了很多标题与我的相同的问题,但它们的解决方法和问题都不一样,所以这个问题不是重复的。

我有一个表,其中fm_sctrdate列是date类型,并具有默认值0000-00-00

enter image description here

网站插入工作正常,但当我尝试通过phpmyadmin插入任何值时,我得到以下错误。

enter image description here

Mysql版本是5.7.11。 还有一件事,最近我们的服务器已从mysqlnd 5.0.12升级到5.7.11

下面是查询语句:

INSERT INTO `iavlif_fmp_clientquote` (`jm_cqid`, `fmsq_id`, `fmsg_id`, 
`fm_sctrdate`, `fm_sctrtime`, `fm_sctbaggage_weight`,     
`fm_sctfreight_weight`, `fm_sctpassenger`, `fm_sctinfant`, 
`fm_sctinfant_details`, `fm_sctinfant_dob`, `fmtp_id`, `fmtpi_id`,
`jmcnt_id`, `fm_name`, `fm_company`, `fm_email`, `fm_phone`, `fmts_id`,
`jmts_id`, `fm_pax_nbr`, `fm_hours_nbr`, `fmqt_id`, `fmtr_id`,
`fm_sctnotes`, `fm_locdepart`, `fm_locarrive`, `fm_sctconsignment_weight`,
`fm_sctconsignment_dimensions`, `fm_sctconsignment_desc`, `fm_sctdangerous`,
`fm_scturgent`, `fm_sctspecial_instructions`, `fm_sctquote_type`,
`fm_sctwork_type`, `fm_sctreoccuring`, `fm_sctaccommodation`, `fm_sctcar`,
`fm_recdate`, `fm_recenddate`, `fm_recfrequency`, `fm_rectime`,    
`fm_medical`, `fm_medical_details`, `fm_user_ip`, `fm_dang_details`,
`fm_sctsubstance`, `fm_sctpurchase_number`, `fm_role_id`, `fm_myrole_id`,
`jm_myrole_id`, `fm_sctwork_point`, `fm_locdepartarrive`, `fm_sctnbr`, 
`fm_dateCreated`, `fm_cc`, `fm_gl`, `fm_timeCreated`, `jm_qtid`, `jmtp_id`,
`jmtpi_id`, `jmsg_id`, `jms_id`, `jmsq_id`, `fms_id`, `fmcq_id`) VALUES
(NULL, '1', '1', '0000-00-00', '1', '1', '1', 'sdfasd', 'No',
'sdafdsafdsaf', 'dsfas', 'sdfasd', 'dsafds', '0', 'asdfds', 'sdfasd',
'sdfads', 'sdaf', 'sdaf', 'sdaf', '0', '0', '0', '1sadfasdsda', 'sdfadsf',
'as', 'as', 'as', 'asas', 'asd', 'No', 'No', 'adsfsd', 'eqwrqew', 'qewrqew',
'No', 'No', 'No', '0000-00-00', '0000-00-00', 'ewqr', 'qewrw', 'No', 'eqwr',
'ewqr', 'qewr', '', '', '', '', '', '', '', '0', '0000-00-00', '', '',
'00:00:00.000000', '', '', '', '', '', '', '', NULL)

在升级mysql后,我们开始遇到这个问题


我将保留日期选择器原样。既不更改日期,也不手动输入日期。 - urfusion
不是解决方案,但我建议使用NULL代替0000-00-00,因为这不是一个有效的日期。 - Peter
@Sougata:请检查更新后的问题。 - urfusion
1
请查看这个链接 - KuKeC
@KuKeC:让我来做吧,这看起来对我很有帮助。 - urfusion
显示剩余11条评论
3个回答

76

错误是由于sql模式引起的,最新MYSQL 5.7文档中可以是严格模式。

为了禁用严格模式和其他严格特性,请运行此查询:

SET GLOBAL sql_mode = '';

了解更多信息,请阅读此处

希望能有所帮助。


9
那么解决方案是什么?:/ - TheRealChx101
18
一个回答应该包含解决方案,而不仅仅是指向它的链接。请参见回答只包含其他地方的链接真的是“好答案”吗? - Melebius
1
解决方案是执行 SET sql_mode = ''; - Sych
这对我有用 SET GLOBAL sql_mode = ''; - kantsverma

25

有三种方法可以让您选择:

  1. SQL模式可以是严格模式。 转到mysql/bin/

打开my.ini或my.cnf(基于Windows或Linux)

sql_mode = "STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"更改为sql_mode= ""

然后重新启动MySQL,然后设置全局sql_mode='';

  1. 从下拉菜单中选择NULL以保持其为空白。
  2. 选择CURRENT_TIMESTAMP以将当前日期时间设置为默认值。

使用HeidiSQL,我可以更改变量名sql_mode并更改以下内容:STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION。我只需要删除NO_ZERO_IN_DATE和NO_ZERO_DATE。然后它就可以工作了。 - Nicolas400

19

在查看了MySQL 5.7的更改后,MySql停止支持日期/时间中的零值。

在日期或时间中使用零是不正确的,应该使用null代替零。


4
是的,Mysql默认停止使用零值。但正如@KuKec在评论中提到的链接所述,我们可以关闭严格模式并使用零值。因此,如果您在答案中添加了这些信息,我没有任何异议接受它。 - urfusion
1
如果该列不接受空值怎么办? - Jay Bienvenu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接