天天看點

學習 MySQL中導入 導出CSV

MySQL中導出CSV格式資料的SQL語句樣本如下:

Sql代碼  

學習 MySQL中導入 導出CSV
學習 MySQL中導入 導出CSV

  1. select * from test_info   
  2. into outfile '/tmp/test.csv'   
  3. fields terminated by ',' optionally enclosed by '"' escaped by '"'   
  4. lines terminated by '\r\n';   

[sql] view plain copy

MySQL中導入CSV格式資料的SQL語句樣本如下:

學習 MySQL中導入 導出CSV
學習 MySQL中導入 導出CSV
  1. load data infile '/tmp/test.csv'   
  2. into table test_info    
  3. fields terminated by ','  optionally enclosed by '"' escaped by '"'   

裡面最關鍵的部分就是格式參數

學習 MySQL中導入 導出CSV
學習 MySQL中導入 導出CSV
  1. lines terminated by '\r\n'   

這個參數是根據RFC4180文檔設定的,該文檔全稱Common Format and MIME Type for Comma-Separated Values (CSV) Files,其中較長的描述了CSV格式,其要點包括:

(1)字段之間以逗号分隔,資料行之間以\r\n分隔;

(2)字元串以半角雙引号包圍,字元串本身的雙引号用兩個雙引号表示。

檔案:test_csv.sql

學習 MySQL中導入 導出CSV
學習 MySQL中導入 導出CSV
  1. use test;  
  2. create table test_info (  
  3.     id  integer not null,  
  4.     content varchar(64) not null,  
  5.     primary key (id)  
  6. );  
  7. delete from test_info;  
  8. insert into test_info values (2010, 'hello, line  
  9. suped  
  10. seped  
  11. "  
  12. end'  
  13. select * from test_info;  
  14. select * from test_info into outfile '/tmp/test.csv' fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n';  
  15. load data infile '/tmp/test.csv' into table test_info  fields terminated by ','  optionally enclosed by '"' escaped by '"' lines terminated by '\r\n';  

檔案:test.csv

Text代碼  

學習 MySQL中導入 導出CSV
學習 MySQL中導入 導出CSV
  1. 2010,"hello, line  
  2. ""  
  3. end"  

[Text] view plain copy

在Linux下如果經常要進行這樣的導入導出操作,當然最好與Shell腳本結合起來,為了避免每次都要寫格式參數,可以把這個串儲存在變量中,如下所示:(檔案mysql.sh)

Bash代碼  

學習 MySQL中導入 導出CSV
學習 MySQL中導入 導出CSV
  1. #!/bin/sh  
  2. # Copyright (c) 2010 codingstandards. All rights reserved.  
  3. # file: mysql.sh  
  4. # description: Bash中操作MySQL資料庫  
  5. # license: LGPL  
  6. # author: codingstandards  
  7. # email: [email protected]  
  8. # version: 1.0  
  9. # date: 2010.02.28  
  10. # MySQL中導入導出資料時,使用CSV格式時的指令行參數  
  11. # 在導出資料時使用:select ... from ... [where ...] into outfile '/tmp/data.csv' $MYSQL_CSV_FORMAT;  
  12. # 在導入資料時使用:load data infile '/tmp/data.csv' into table ... $MYSQL_CSV_FORMAT;  
  13. # CSV标準文檔:RFC 4180  
  14. MYSQL_CSV_FORMAT="fields terminated by ',' optionally enclosed by '\"' escaped by '\"' lines terminated by '\r\n'"  

使用示例如下:(檔案test_mysql_csv.sh)

學習 MySQL中導入 導出CSV
學習 MySQL中導入 導出CSV
  1. . /opt/shtools/commons/mysql.sh  
  2. # MYSQL_CSV_FORMAT="fields terminated by ',' optionally enclosed by '\"' escaped by '\"' lines terminated by '\r\n'"  
  3. echo "MYSQL_CSV_FORMAT=$MYSQL_CSV_FORMAT"  
  4. rm /tmp/test.csv  
  5. mysql -p --default-character-set=gbk -t --verbose test <<EOF  
  6. create table if not exists test_info (  
  7. -- select * from test_info into outfile '/tmp/test.csv' fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n';  
  8. select * from test_info into outfile '/tmp/test.csv' $MYSQL_CSV_FORMAT;  
  9. -- load data infile '/tmp/test.csv' into table test_info fields terminated by ','  optionally enclosed by '"' escaped by '"' lines terminated by '\r\n';  
  10. load data infile '/tmp/test.csv' into table test_info $MYSQL_CSV_FORMAT;  
  11. EOF  
  12. echo "===== content in /tmp/test.csv ====="  
  13. cat /tmp/test.csv