1. 程式人生 > >Incorrect datetime value: '' for column Mysql5.6 中datetime 型別欄位的插入問題

Incorrect datetime value: '' for column Mysql5.6 中datetime 型別欄位的插入問題

在5.0.45-community-nt-log中能正常執行的SQL,在5.6.21中不正常。

1. 1檢視資料庫版本

mysql> select database(), version();
+------------+-------------------------+
| database() | version()               |
+------------+-------------------------+
| test       | 5.0.45-community-nt-log |
+------------+-------------------------+
1 row in set

1.2.建立表test_datatime,指定sendTime列為datatime型別,預設為空。

mysql> CREATE TABLE `test_datatime` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `sendTime` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Query OK, 0 rows affected

1.3. 嘗試插入'' 到sendTime列,在mysql5.0.45中SQL能正常執行。

mysql> INSERT INTO `test_datatime` (`id`, `sendTime`)  VALUES (5, now());
Query OK, 1 row affected

mysql> INSERT INTO `test_datatime` (`id`, `sendTime`)  VALUES (6,'' );
Query OK, 1 row affected

mysql> select * from test_datatime;
+----+---------------------+
| id | sendTime            |
+----+---------------------+
|  5 | 2014-10-30 16:55:02 |
|  6 | 0000-00-00 00:00:00 |
+----+---------------------+
2 rows in set

2. 1檢視資料庫版本

mysql> select database(), version();
+------------+-------------------------------------------+
| database() | version()                                 |
+------------+-------------------------------------------+
| lw         | 5.6.21-enterprise-commercial-advanced-log |
+------------+-------------------------------------------+
1 row in set

2.2.建立表test_datatime,指定sendTime列為datatime型別,預設為空。

mysql> CREATE TABLE `test_datatime` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `sendTime` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Query OK, 0 rows affected

2.3. 嘗試插入'' 到sendTime列,在mysql5.6.21中SQL報錯1292 - Incorrect datetime value

mysql> INSERT INTO `test_datatime` (`id`, `sendTime`)  VALUES (5, now());
Query OK, 1 row affected

mysql> INSERT INTO `test_datatime` (`id`, `sendTime`)  VALUES (6,'' );
1292 - Incorrect datetime value: '' for column 'sendTime' at row 1
mysql> select * from test_datatime;
+----+---------------------+
| id | sendTime            |
+----+---------------------+
|  5 | 2014-10-30 16:04:01 |
+----+---------------------+
1 row in set

由於這種改變,當Mysql由低版本升級為較高的版本時,要做全面的測試。同時專案中的驅動包,也要同步更新。