在使用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表中,如下圖:
可以看到兩個檔案僅有生日的格式不同,我們對兩個檔案分別用load data local infile進行匯入測試,結果如下:
檢查一下與date有關的系統變數如下:
mysql> set date_format='%m/%d/%Y';
ERROR 1238 (HY000): Variable 'date_format' is a read only variable
那麼我們直接在配置檔案my.ini中設定該值,重啟mysql服務,成功修改了date_format的值:
mysql> select * from people;
+------+------------+-----+
| name | birthday | age |
+------+------------+-----+
| Lily | 0000-00-00 | 25 |
| Lucy | 0000-00-00 | 23 |
+------+------------+-----+
2 rows in set (0.00 sec)
那麼問題來了,如何正確匯入非預設格式的date資料呢?
嘗試了一下大概有三個辦法:
1.使用編輯軟體將csv檔案中的日期格式轉換成mysql預設的日期格式,然後再匯入;
2.使用某些第三方軟體進行匯入,如navicat,自帶日期格式轉換功能;
3.在load data local infile語句中使用STR_TO_DATE函式進行轉換:
個人推薦使用第三種方法,實際測試命令列下匯入資料比通過客戶端軟體匯入速度快太多了。