错误代码1292:MySQL日期值不正确

27

我有一张表格

`CREATE  TABLE IF NOT EXISTS `PROGETTO`.`ALBERGO` (

`ID` INT(11) NOT NULL COMMENT 'identificativo dell\' albergo' ,
`nome` VARCHAR(45) NULL COMMENT 'Il nome dell\'albergo' ,
`viale` VARCHAR(45) NULL COMMENT 'Il viale in cui si trova  ' ,
`num_civico` VARCHAR(5) NULL COMMENT 'Il numero civico che gli appartiene' ,
`data_apertura` DATE NULL COMMENT 'Data di inizio apertura (inizio stagione)' ,
`data_chiusura` DATE NULL COMMENT 'Data di chiusura (fine stagione)' ,
`orario_apertura` TIME NULL COMMENT 'Orario di apertura' ,
`orario_chiusura` TIME NULL COMMENT 'Orario di chiusura' ,
`posti_liberi` INT(11) NULL COMMENT 'Disponiblità posti liberi ' ,
`costo_intero` FLOAT NULL COMMENT 'Costo del prezzo intero' ,
`costo_ridotto` FLOAT NULL COMMENT 'Costo del prezzo ridotto' ,
`stelle` INT(11) NULL COMMENT 'Classificazione in base al criterio delle stelle' ,
`telefono` VARCHAR(15) NULL COMMENT 'Recapito telefonico' ,
`mail` VARCHAR(100) NULL COMMENT 'Recapito e-mail' ,
`web` VARCHAR(100) NULL COMMENT 'Sito Web relativo all\'ente' ,
'Nome-paese` VARCHAR(45) NOT NULL COMMENT 'Identificativo del paese in cui si trova l\'albergo' ,
`Comune` CHAR(2) NOT NULL COMMENT 'Identificativo del comune in cui si trova l\'albergo' ,
PRIMARY KEY (`ID`) ,
INDEX `Nome-paese` (`Nome-paese` ASC) ,
INDEX `Comune` (`Comune` ASC) ,
CONSTRAINT `Nome-paese`
  FOREIGN KEY (`Nome-paese` )
  REFERENCES `PROGETTO`.`PAESE` (`Nome-paese` )
  ON DELETE NO ACTION
  ON UPDATE CASCADE,
CONSTRAINT `Comune`
  FOREIGN KEY (`Comune` )
  REFERENCES `PROGETTO`.`PAESE` (`Comune` )
  ON DELETE NO ACTION
  ON UPDATE CASCADE)
ENGINE = InnoDB

当我尝试运行这个查询时:

INSERT INTO `PROGETTO`.`ALBERGO`(`ID`, `nome`, `viale`, `num_civico`, `data_apertura`, `data_chiusura`, `orario_apertura`, `orario_chiusura`, `posti_liberi`, `costo_intero`, `costo_ridotto`, `stelle`, `telefono`, `mail`, `web`, `Nome-paese`, `Comune`) 
VALUES(0, 'Hotel Centrale', 'Via Passo Rolle', '74', '01-05-2012', '31-09-2012', '06:30', '24:00', 80, 50, 25, 3, '43968083', 'info@hcentrale.it', 'http://www.hcentrale.it/', 'Trento', 'TN')

*错误代码: 1292。在第1行,列"data_apertura"的日期值不正确: '01-05-2012'*

我需要改变什么?(我尝试将日期格式从gg/mm/yyyy更改为gg-mm-yyyy,但没有任何变化)


2
data_apertura字段是DATE类型,必须像2013-01-31这样。 - Kin
日期和时间字面量 - Hamlet Hakobyan
6个回答

53

在mysql 5.7 中,像0000-00-00 00:00:00这样的日期值是不被允许的。

如果想要允许它,就需要更新你的my.cnf文件如下:

sudo nano /etc/mysql/my.cnf

查找

[mysqld]

在此之后添加:

sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

重启 mysql 服务:

sudo service mysql restart

完成!


5
对于Windows来说,它是我的.ini文件。 - choco
1
谢谢你帮了我很多,特别是当我在处理旧配置的遗留代码时。 - Yvon Huynh
2
我必须将该行添加到/etc/mysql/mysql.conf.d/mysqld.cnf文件中。因此,执行sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf命令。 - Keith

31

请以以下格式插入日期:yyyy-MM-dd,例如:

INSERT INTO `PROGETTO`.`ALBERGO`(`ID`, `nome`, `viale`, `num_civico`, `data_apertura`, `data_chiusura`, `orario_apertura`, `orario_chiusura`, `posti_liberi`, `costo_intero`, `costo_ridotto`, `stelle`, `telefono`, `mail`, `web`, `Nome-paese`, `Comune`) 
VALUES(0, 'Hotel Centrale', 'Via Passo Rolle', '74', '2012-05-01', '2012-09-31', '06:30', '24:00', 80, 50, 25, 3, '43968083', 'info@hcentrale.it', 'http://www.hcentrale.it/', 'Trento', 'TN')

2

我在Workbench中使用C#应用程序插入查询时遇到了相同的问题。在我的情况下,使用ISO格式解决了这个问题。

string value = date.ToString("yyyy-MM-dd HH:mm:ss");

1
我恰好在Windows 10的localhost上工作,使用WAMP。事实证明,Wamp有一个非常易于访问的配置界面,可以更改MySQL配置。您只需要进入Wamp面板,然后进入MySQL,再进入设置并将模式更改为sql-mode:none(基本上是禁用严格模式)。以下图片说明了这一点。

enter image description here


0

仅为 @Sinan Eldem 的回答更新:

自 MySQL 8.0 版本开始,sql_mode='NO_AUTO_CREATE_USER' 已被弃用source),应该从行中删除,否则将导致读取 sql_mode 错误并导致 mysqld 启动失败。

如果使用 MySQL 8.0 及以上版本,请添加以下行代替:

[mysqld]

sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"

0

一次更新。形如“2019-08-00”日期将触发相同的错误。添加以下行:

[mysqld]

sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

将日期插入到mysql.cnf中也可以解决这个问题。现在,插入格式不正确的日期会生成超出范围的警告,但仍会插入数据。

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