zxz1987

MySQL中导出CSV格式数据的SQL语句样本如下:

Sql代码  收藏代码
  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
 
  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\';   

MySQL中导入CSV格式数据的SQL语句样本如下:

Sql代码  收藏代码
  1. load data infile \'/tmp/test.csv\'   
  2. into table test_info    
  3. fields terminated by \',\'  optionally enclosed by \'"\' escaped by \'"\'   
  4. lines terminated by \'\r\n\';   
[sql] view plain copy
 
  1. load data infile \'/tmp/test.csv\'   
  2. into table test_info    
  3. fields terminated by \',\'  optionally enclosed by \'"\' escaped by \'"\'   
  4. lines terminated by \'\r\n\';   

里面最关键的部分就是格式参数

Sql代码  收藏代码
  1. fields terminated by \',\' optionally enclosed by \'"\' escaped by \'"\'   
  2. lines terminated by \'\r\n\'   
[sql] view plain copy
 
  1. fields terminated by \',\' optionally enclosed by \'"\' escaped by \'"\'   
  2. 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

Sql代码  收藏代码
  1. use test;  
  2.   
  3. create table test_info (  
  4.     id  integer not null,  
  5.     content varchar(64) not null,  
  6.     primary key (id)  
  7. );  
  8.   
  9. delete from test_info;  
  10.   
  11. insert into test_info values (2010, \'hello, line  
  12. suped  
  13. seped  
  14. "  
  15. end\'  
  16. );  
  17.   
  18. select * from test_info;  
  19.   
  20. select * from test_info into outfile \'/tmp/test.csv\' fields terminated by \',\' optionally enclosed by \'"\' escaped by \'"\' lines terminated by \'\r\n\';  
  21.   
  22. delete from test_info;  
  23.   
  24. load data infile \'/tmp/test.csv\' into table test_info  fields terminated by \',\'  optionally enclosed by \'"\' escaped by \'"\' lines terminated by \'\r\n\';  
  25.   
  26. select * from test_info;  
  27.   
  28.    
[sql] view plain copy
 
  1. use test;  
  2.   
  3. create table test_info (  
  4.     id  integer not null,  
  5.     content varchar(64) not null,  
  6.     primary key (id)  
  7. );  
  8.   
  9. delete from test_info;  
  10.   
  11. insert into test_info values (2010, \'hello, line  
  12. suped  
  13. seped  
  14. "  
  15. end\'  
  16. );  
  17.   
  18. select * from test_info;  
  19.   
  20. select * from test_info into outfile \'/tmp/test.csv\' fields terminated by \',\' optionally enclosed by \'"\' escaped by \'"\' lines terminated by \'\r\n\';  
  21.   
  22. delete from test_info;  
  23.   
  24. load data infile \'/tmp/test.csv\' into table test_info  fields terminated by \',\'  optionally enclosed by \'"\' escaped by \'"\' lines terminated by \'\r\n\';  
  25.   
  26. select * from test_info;  
  27.   
  28.    

 

文件:test.csv

Text代码  收藏代码
  1. 2010,"hello, line  
  2. suped  
  3. seped  
  4. ""  
  5. end"  
[Text] view plain copy
 
  1. 2010,"hello, line  
  2. suped  
  3. seped  
  4. ""  
  5. end"  

 

Linux下如果经常要进行这样的导入导出操作,当然最好与Shell脚本结合起来,为了避免每次都要写格式参数,可以把这个串保存在变量中,如下所示:(文件mysql.sh)

Bash代码  收藏代码
  1. #!/bin/sh  
  2.   
  3.   
  4. # Copyright (c) 2010 codingstandards. All rights reserved.  
  5. # file: mysql.sh  
  6. # description: Bash中操作MySQL数据库  
  7. # license: LGPL  
  8. # author: codingstandards  
  9. # email: codingstandards@gmail.com  
  10. # version: 1.0  
  11. # date: 2010.02.28  
  12.   
  13.   
  14. # MySQL中导入导出数据时,使用CSV格式时的命令行参数  
  15. # 在导出数据时使用:select ... from ... [where ...] into outfile \'/tmp/data.csv\' $MYSQL_CSV_FORMAT;  
  16. # 在导入数据时使用:load data infile \'/tmp/data.csv\' into table ... $MYSQL_CSV_FORMAT;  
  17. # CSV标准文档:RFC 4180  
  18. MYSQL_CSV_FORMAT="fields terminated by \',\' optionally enclosed by \'\"\' escaped by \'\"\' lines terminated by \'\r\n\'"  
 

使用示例如下:(文件test_mysql_csv.sh)

Bash代码  收藏代码
  1. #!/bin/sh  
  2.   
  3. . /opt/shtools/commons/mysql.sh  
  4.   
  5. # MYSQL_CSV_FORMAT="fields terminated by \',\' optionally enclosed by \'\"\' escaped by \'\"\' lines terminated by \'\r\n\'"  
  6. echo "MYSQL_CSV_FORMAT=$MYSQL_CSV_FORMAT"  
  7.   
  8. rm /tmp/test.csv  
  9.   
  10. mysql -p --default-character-set=gbk -t --verbose test <<EOF  
  11.   
  12. use test;  
  13.   
  14. create table if not exists test_info (  
  15.     id  integer not null,  
  16.     content varchar(64) not null,  
  17.     primary key (id)  
  18. );  
  19.   
  20. delete from test_info;  
  21.   
  22. insert into test_info values (2010, \'hello, line  
  23. suped  
  24. seped  
  25. "  
  26. end\'  
  27. );  
  28.   
  29. select * from test_info;  
  30.   
  31. -- select * from test_info into outfile \'/tmp/test.csv\' fields terminated by \',\' optionally enclosed by \'"\' escaped by \'"\' lines terminated by \'\r\n\';  
  32. select * from test_info into outfile \'/tmp/test.csv\' $MYSQL_CSV_FORMAT;  
  33.   
  34. delete from test_info;  
  35.   
  36. -- load data infile \'/tmp/test.csv\' into table test_info fields terminated by \',\'  optionally enclosed by \'"\' escaped by \'"\' lines terminated by \'\r\n\';  
  37. load data infile \'/tmp/test.csv\' into table test_info $MYSQL_CSV_FORMAT;  
  38.   
  39. select * from test_info;  
  40.   
  41.   
  42. EOF  
  43.   
  44. echo "===== content in /tmp/test.csv ====="  
  45. cat /tmp/test.csv  

分类:

技术点:

相关文章:

  • 2021-06-03
  • 2021-09-01
  • 2021-11-20
  • 2021-11-20
  • 2021-11-20
  • 2021-12-07
  • 2021-07-08
  • 2022-12-23
猜你喜欢
  • 2021-06-10
  • 2022-12-23
  • 2022-12-23
  • 2021-11-29
  • 2022-01-16
相关资源
相似解决方案