關於MySQL中使用LOAD DATA INFILE導入csv文件時的日期格式問題


在使用MySQL時,常常會用到Load Data Infile來導入數據,在遇到Date類型的列時,有時會遇到格式轉換的問題:

首先創建一張簡單的people表,包含名字,生日,年齡三個字段:
mysql> create table people(
    -> name varchar(10) NOT NULL,
    -> birthday date NOT NULL,
    -> age int NOT NULL);
Query OK, 0 rows affected (0.18 sec)
構造兩個測試文件,導入到people表中,如下圖:
關於MySQL中使用LOAD <wbr>DATA <wbr>INFILE導入csv文件時的日期格式問題
可以看到兩個文件僅有生日的格式不同,我們對兩個文件分別用load data local infile進行導入測試,結果如下:
關於MySQL中使用LOAD <wbr>DATA <wbr>INFILE導入csv文件時的日期格式問題
關於MySQL中使用LOAD <wbr>DATA <wbr>INFILE導入csv文件時的日期格式問題
可以看到test1.txt中的形如%Y-%m-%d格式的日期可以被正確導入,而test2.txt中的形如%m/%d/%Y格式的日期無法被正確導入,提示數據被截斷。
 
檢查一下與date有關的系統變量如下:
關於MySQL中使用LOAD <wbr>DATA <wbr>INFILE導入csv文件時的日期格式問題
發現mysql中date_format的默認值是%Y-%m-%d,嘗試修改該變量的值,返回如下錯誤:
mysql> set date_format='%m/%d/%Y';
ERROR 1238 (HY000): Variable 'date_format' is a read only variable
那么我們直接在配置文件my.ini中設置該值,重啟mysql服務,成功修改了date_format的值:
關於MySQL中使用LOAD <wbr>DATA <wbr>INFILE導入csv文件時的日期格式問題
重新導入test2.txt,本以為可以正常導入,結果卻和原來一樣,連顯示格式都沒有變:
mysql> select * from people;
+------+------------+-----+
| name | birthday   | age |
+------+------------+-----+
| Lily | 0000-00-00 |  25 |
| Lucy | 0000-00-00 |  23 |
+------+------------+-----+
2 rows in set (0.00 sec)
百度一下據說這個變量已經被mysql拋棄了…………
 
那么問題來了,如何正確導入非默認格式的date數據呢?
嘗試了一下大概有三個辦法:
1.使用編輯軟件將csv文件中的日期格式轉換成mysql默認的日期格式,然后再導入;
2.使用某些第三方軟件進行導入,如navicat,自帶日期格式轉換功能;
3.在load data local infile語句中使用STR_TO_DATE函數進行轉換:
關於MySQL中使用LOAD <wbr>DATA <wbr>INFILE導入csv文件時的日期格式問題
個人推薦使用第三種方法,實際測試命令行下導入數據比通過客戶端軟件導入速度快太多了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM