mysql的數(shù)據(jù)遷移的時(shí)候,發(fā)現(xiàn)Oracle中的date類(lèi)型,對(duì)應(yīng)的mysql的時(shí)間類(lèi)型設(shè)置不當(dāng)容易引起錯(cuò)誤,特別是存在空值的時(shí)候 mysql 版本 5.6.40..."/>
溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

oracle --date-對(duì)應(yīng) mysql 時(shí)間類(lèi)型的以及空值的處理

發(fā)布時(shí)間:2020-08-01 21:04:51 來(lái)源:網(wǎng)絡(luò) 閱讀:1066 作者:bjxiangqian 欄目:MySQL數(shù)據(jù)庫(kù)

因?yàn)樵谧鯫racle---->mysql的數(shù)據(jù)遷移的時(shí)候,發(fā)現(xiàn)Oracle中的date類(lèi)型,對(duì)應(yīng)的mysql的時(shí)間類(lèi)型設(shè)置不當(dāng)容易引起錯(cuò)誤,特別是存在空值的時(shí)候

mysql 版本 5.6.40版本

mysql> desc t1;
+-------------+-----------+------+-----+-------------------+-----------------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------+------+-----+-------------------+-----------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| time_1 | time | YES | | NULL | |
| date_2 | date | YES | | NULL | |
| datetime_3 | datetime | YES | | NULL | |
| timestamp_4 | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------------+-----------+------+-----+-------------------+-----------------------------+
5 rows in set (0.00 sec)

可以插入當(dāng)前的時(shí)間

mysql> insert into t1 values(null,now(),now(),now(),now());
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> show warnings;
+-------+------+--------------------------------------------------------------------------+
| Level | Code | Message |
+-------+------+--------------------------------------------------------------------------+
| Note | 1292 | Incorrect date value: '2018-05-11 11:18:41' for column 'date_2' at row 1 |
+-------+------+--------------------------------------------------------------------------+
1 row in set (0.00 sec)

提示date類(lèi)型插入告警,但是依舊可以插入進(jìn)去,因?yàn)閐ate類(lèi)型只記錄年月(yyyy-mm)

Query OK, 1 row affected (0.01 sec)

4個(gè)時(shí)間空值插入測(cè)試 ,time類(lèi)型,插入0

mysql> insert into t1 values (null,'0','2018-01-01','2018-01-01 12:12:12','2018-10-10 00:00:00');
Query OK, 1 row affected (0.01 sec)

mysql> select * from t1;
+----+----------+------------+---------------------+---------------------+
| id | time_1 | date_2 | datetime_3 | timestamp_4 |
+----+----------+------------+---------------------+---------------------+
| 1 | 22:21:23 | 2018-05-08 | 2018-05-08 22:21:23 | 2018-05-08 22:21:23 |
| 2 | 22:21:54 | 2018-05-08 | 2018-05-08 22:21:54 | 2018-05-08 22:21:54 |
| 3 | 00:00:00 | 2018-01-01 | 2018-01-01 12:12:12 | 2018-10-10 00:00:00 | time_1 自動(dòng)填充為00:00:00
| 4 | 00:00:00 | 2018-01-01 | 2018-01-01 12:12:12 | 2018-10-10 00:00:00 |
+----+----------+------------+---------------------+---------------------+
4 rows in set (0.00 sec)

接著全部插入0,看是否能夠插入進(jìn)去

測(cè)試date類(lèi)型---------------
第三列為date類(lèi)型

mysql> insert into t1 values(null,'0','0','0','0'); 插入 0
ERROR 1292 (22007): Incorrect date value: '0' for column 'date_2' at row 1

mysql> insert into t1 values(null,'0','','0','0'); 插入‘ ’測(cè)試,留空白,測(cè)試插入
ERROR 1292 (22007): Incorrect date value: '' for column 'date_2' at row 1

mysql> insert into t1 values(null,'0','null','0','0'); 插入 null 測(cè)試
ERROR 1292 (22007): Incorrect date value: 'null' for column 'date_2' at row 1

-------------測(cè)試datetime類(lèi)型--
第四列為datetime類(lèi)型
mysql> insert into t1 values(null,'0',null,'0','0');
ERROR 1292 (22007): Incorrect datetime value: '0' for column 'datetime_3' at row 1
插入null成功
---------測(cè)試timestamp類(lèi)型
第五列為timestamp
mysql> insert into t1 values(null,'0',null,null,'0');
ERROR 1292 (22007): Incorrect datetime value: '0' for column 'timestamp_4' at row 1
mysql> insert into t1 values(null,'0',null,null,null);
Query OK, 1 row affected (0.00 sec)

插入null 成功

mysql> select * from t1;
+----+----------+------------+---------------------+---------------------+
| id | time_1 | date_2 | datetime_3 | timestamp_4 |
+----+----------+------------+---------------------+---------------------+
| 1 | 22:21:23 | 2018-05-08 | 2018-05-08 22:21:23 | 2018-05-08 22:21:23 |
| 2 | 22:21:54 | 2018-05-08 | 2018-05-08 22:21:54 | 2018-05-08 22:21:54 |
| 3 | 00:00:00 | 2018-01-01 | 2018-01-01 12:12:12 | 2018-10-10 00:00:00 |
| 4 | 00:00:00 | 2018-01-01 | 2018-01-01 12:12:12 | 2018-10-10 00:00:00 |
| 5 | 00:00:00 | NULL | NULL | 2018-05-08 22:33:22 |
+----+----------+------------+---------------------+---------------------+
5 rows in set (0.00 sec)

總結(jié) : Oracle數(shù)據(jù)庫(kù)的date類(lèi)型和mysql的date類(lèi)型是不一樣的,Oracle為yyyy-mm-dd hh:mi:ss和mysql中的datetime類(lèi)型匹配, 而 mysql 為 yyyy-mm 。當(dāng)在存在空值的時(shí)候,mysql的time 類(lèi)型可以使用0零來(lái)插入,而date,datetime,timestamp可以使用null 來(lái)插入,但是timestamp即使為null,也會(huì)默認(rèn)插入當(dāng)前時(shí)間戳。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI