在使用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函數進行轉換:
個人推薦使用第三種方法,實際測試命令行下導入數據比通過客戶端軟件導入速度快太多了。