MySQL直接導出CSV文件,並解決中文亂碼的問題


需求:

  需要導出hr_users 表中的部分字段的數據,以前是用PHP寫腳本,然后導出CSV文件。

  在MySQL中,它自己就能導出CSV文件 ,只不過是有如下幾個問題需要大家解決。

  1. 生成文件不成功,沒有讀寫權限

  2.導出數據為中文亂碼

  3.數據沒有格式化,閱讀不方便

解決方案:

如果使用 select  ... into  outfile ...方式導出數據,需要分為兩種情況 :
1. windows系統下:可以隨意指定對應的目錄 。
2. linux 系統下 :
(1)不指定目錄 ,默認在當前導出數據庫數據目錄下 ,例如  /var/lib/mysql/db_name 
(2) 指定目錄時,默認只能指定 /tmp目錄 。否則回報 “ ERROR 1 (HY000) at line 1: Can't create/write to file '/xxxx/xxxx/xxx.csv' (Errcode: 13)” 錯誤 !導致原因是因為權限問題,修改起來比較麻煩 !可以放到/tmp/目錄下,然后cp到其它你想存放的目錄。【

推薦使用這種方法】

 

對於中文亂碼的問題,有兩種解決方案

1.user表是utf8編碼,excel默認編碼格式是GBK,excel直接打開時候是一堆亂碼。后來想了一個辦法中轉,先保存成為txt格式,excel打開txt時候會提示選擇用哪種編碼方式打開,選擇utf8解決。

2.導出時候加上CHARACTER SET gbk 即可【推薦使用】

 

關於數據格式化的問題,需要給導出的字段傳遞一些參數

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)字符串以半角雙引號包圍,字符串本身的雙引號用兩個雙引號表示。

 

terminated by分隔符:意思是以什么字符作為分隔符
enclosed by字段括起字符
escaped by轉義字符
terminated by描述字段的分隔符,默認情況下是tab字符(\t) 
enclosed by描述的是字段的括起字符。
escaped by描述的轉義字符。默認的是反斜杠(backslash:\ )  
 

一個完整的實例如下所示:

 select id , tel,email from hr_users limit 3 into outfile '/tmp/junjun.csv' character set gbk 
fields terminated by ',' optionally enclosed by '"'
lines terminated by '\n';

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM