MySQL不正确日期时间值早于1980年的日期

时间:2014-08-11 19:25:35

标签: mysql timestamp mysqlimport

虽然尝试将.sql文件导入我的数据库,但是其中一个插入语句出现以下错误 -

ERROR 1292 (22007) at line 31504: Incorrect datetime value: '1936-01-31 00:00:00' for column 'BatchDate' at row 1. Operation failed with exitcode 1

我仅在1980年以前的日期遇到此错误。仅在我尝试通过import语句或WorkBench导入转储时才会发生此错误。如果我单独执行语句,它可以正常工作。这是表结构和插入语句

DROP TABLE IF EXISTS `BatchEntry`;

CREATE TABLE `BatchEntry` (
  `BatchNo` INTEGER NOT NULL AUTO_INCREMENT, 
  `BatchDate` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
  `BTax_ID` DOUBLE NULL DEFAULT 0, 
  `BPayor_No` DOUBLE NULL DEFAULT 0, 
  `BBroker_No` DOUBLE NULL DEFAULT 0, 
  `BHam_Cont` VARCHAR(4), 
  `BInv_Org_Date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
  `BInv_Due_Date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
  `BDate_Adv` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
  `BRec_Amt` DECIMAL(19,4) DEFAULT 0, 
  `BPaymnt_Com` LONGTEXT, 
  `BTrans_Count` INTEGER DEFAULT 0, 
  `BPrefix` VARCHAR(10), 
  `BStartNumber` INTEGER DEFAULT 0, 
  `BSuffix` VARCHAR(10), 
  `BCreated` TINYINT(1) DEFAULT 0, 
  `BAdvMethod` INTEGER DEFAULT 0, 
  INDEX (`BPayor_No`), 
  INDEX (`BTax_ID`), 
  PRIMARY KEY (`BatchNo`)
) ENGINE=myisam DEFAULT CHARSET=utf8;

INSERT INTO `BatchEntry` (`BatchNo`, `BatchDate`, `BTax_ID`, `BPayor_No`, `BBroker_No`, `BHam_Cont`, `BInv_Org_Date`, `BInv_Due_Date`, `BDate_Adv`, `BRec_Amt`, `BPaymnt_Com`, `BTrans_Count`, `BPrefix`, `BStartNumber`, `BSuffix`, `BCreated`, `BAdvMethod`) VALUES (1396, '1936-01-31 00:00:00', 561986585, 4528, 749, 'BSR', '2005-12-30 00:00:00', '2006-01-30 00:00:00', '2006-01-31 00:00:00', 0, NULL, 14, 'MC', 24850, NULL, 1, 1);

1 个答案:

答案 0 :(得分:13)

Batchdate不是DATETIME列,而是TIMESTAMP列。 TIMESTAMP的范围不包括此日期:

CREATE TABLE `BatchEntry` (
  `BatchNo` INTEGER NOT NULL AUTO_INCREMENT, 
  `BatchDate` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,    -- it's TIMESTAMP

,错误消息是

  

日期时间值不正确:'1936-01-31 00:00:00'

超过'1970-01-01 00:00:01',超出数据类型范围TIMESTAMP

The DATE, DATETIME, and TIMESTAMP Types

  

TIMESTAMP数据类型用于包含date和的值   时间部分。 TIMESTAMP的范围是'1970-01-01 00:00:01'UTC到   '2038-01-19 03:14:07'UTC。

<强>解决方案

将数据类型更改为DATETIME

CREATE TABLE `BatchEntry` (
  `BatchNo` INTEGER NOT NULL AUTO_INCREMENT, 
  `BatchDate` DATETIME DEFAULT CURRENT_TIMESTAMP, 
  [...]

如果您使用的是MySQL 5.6.5或更高版本,则可以将数据类型更改为DATETIME,因为此版本DATETIME也支持自动初始化。您似乎使用的是较新版本,因为您使用了多个具有自动初始化功能的此类列。此功能已同时添加。

Automatic Initialization and Updating for TIMESTAMP and DATETIME

  

从MySQL 5.6.5开始,TIMESTAMP和DATETIME列可以自动生成   初始化并更新到当前日期和时间(即,   当前时间戳)。在5.6.5之前,这仅适用于TIMESTAMP,和   每个表最多一个TIMESTAMP列。

注意

对于20世纪70年代的日期值,它也会起作用。