MySql導入/導出csv文件

MySql導入/導出csv文件

1. 導入

(前提是已創建CSV_DB.TBL_NAME的表)

LOAD DATA INFILE '/home/download/test.csv' INTO TABLE CSV_DB.TBL_NAME FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';

常用參數:

  • FIELDS TERMINATED BY ‘,’:指定字段分隔符
  • OPTIONALLY ENCLOSED BY ‘"’:認爲雙引號中的是一個獨立的字段。Excel 轉 CSV 時,有特殊字符(逗號、頓號等)的字段,會自動用雙引號引起來
  • LINES TERMINATED BY ‘\n’:指定行分隔符,注意,在 Windows 平臺上創建的文件,分隔符是 ‘\r\n’

如果需要導入一個列數很多的表,手動創建表會很麻煩。可以使用phpMyAdmin輔助導入/導出。
在這裏插入圖片描述

2. 導出

SELECT … INTO 語法可以將查詢結果保存到變量或文件中:

  • SELECT … INTO var_list # 將字段的值保存到變量中
  • SELECT … INTO OUTFILE # 將選中的行保存到文件中。可以指定列和行的結束符,以生成指定格式的文件。
  • SELECT … INTO DUMPFILE # 將一個單獨的行寫入文件中,沒有格式
mysql > SELECT a,b,a+b INTO OUTFILE '/home/download/test.csv' 
  FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM test_table;

mysql> SELECT * INTO OUTFILE '/home/download/test.csv' 
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
  LINES TERMINATED BY '\n'
  FROM TBL_NAME;
Query OK, 21000 rows affected (2.01 sec)

常用參數(跟 LOAD DATA INFILE 語法一樣):

  • FIELDS TERMINATED BY ‘,’:指定字段分隔符
  • OPTIONALLY ENCLOSED BY ‘"’:認爲雙引號中的是一個獨立的字段。Excel 轉 CSV 時,有特殊字符(逗號、頓號等)的字段,會自動用雙引號引起來
  • LINES TERMINATED BY ‘\n’:指定行分隔符,注意,在 Windows 平臺上創建的文件,分隔符是 ‘\r\n’

3. 注意事項

  1. Windows平臺csv文件編碼:
    1)win下保存的csv文件注意要手動轉至utf-8編碼。
    Excel 另存爲 CSV 文件後,默認編碼是“使用 UTF-8 BOM 編碼”,在 Notepad++ 中打開文件,選擇“使用 UTF-8 編碼”保存即可清除 BOM 頭:
    2)數據正常,但無法導入數據,可嘗試去除csv頭(第一行title)
    在這裏插入圖片描述
  2. Show fail “ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
    這是由於上傳或下載的文件沒有在 MySQL 指定的安全目錄中, 或者安全目錄根本沒有開啓。
    使用以下命令查看安全目錄狀態:
SHOW VARIABLES LIKE "secure_file_priv";

mysql> SHOW VARIABLES LIKE “secure_file_priv”;
±-------------------------±----------------------+
| Variable_name | Value |
±-------------------------±----------------------+
| require_secure_transport | OFF |
| secure_auth | ON |
| secure_file_priv | /var/lib/mysql-files/ |
±-------------------------±----------------------+
3 rows in set (0.00 sec)“””

解決辦法:
1)在 /etc/my.cnf 配置文件(Windows 平臺下是 my.ini)中添加:

secure_file_priv =

“=” 後值爲空,意爲無限制,你可以使用任意目錄
2)在 /etc/my.cnf 配置文件(Windows 平臺下是 my.ini)中添加:

secure_file_priv = <#your safe dir#>

“=” 後指定安全目錄。推薦使用這種方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章