需求:
需要導出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)字符串以半角雙引號包圍,字符串本身的雙引號用兩個雙引號表示。
enclosed by字段括起字符
escaped by轉義字符
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';