首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 數據導出 Excel 實戰:INTO OUTFILE + 編碼轉換避免亂碼

     編輯:MySQL 綜合教學

MySQL 數據導出 Excel 實戰:INTO OUTFILE + 編碼轉換避免亂碼

MySQL 支持 SELECT ... INTO OUTFILE 直接導出文本文件,Excel 可直接打開。但默認導出編碼為服務器字符集(常為 utf8),Excel 默認以 GBK 打開 CSV,導致中文亂碼。本文演示導出全流程與編碼轉換技巧。

準備測試數據

CREATE TABLE users (
  username VARCHAR(40) NOT NULL,
  password VARCHAR(40) NOT NULL
) CHARSET=utf8;

INSERT INTO users VALUES ('admin', 'admin');
INSERT INTO users VALUES ('理央silence', '王培坤');

直接導出(產生亂碼)

SELECT username, password FROM users INTO OUTFILE 'd:\\test.xls';

打開 Excel 顯示亂碼(UTF-8 字節被 GBK 解析)。

亂碼示例

解決方案:導出時轉碼為 GBK

SELECT CONVERT(username USING gb2312), CONVERT(password USING gb2312)
FROM users INTO OUTFILE 'd:\\test.xls';

或使用 gbk(MySQL 以 gb2312 別名支援 GBK)。

正常顯示

進階:自定義分隔符與換行符(生成標準 CSV)

SELECT username, password FROM users
INTO OUTFILE 'd:\\test.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
LINES TERMINATED BY '\r\n';
  • FIELDS TERMINATED BY:列分隔符(默認 Tab)。
  • ENCLOSED BY:包圍字符(默認無)。
  • ESCAPED BY:轉義字符(默認 \)。
  • LINES TERMINATED BY:行結束符(默認 \n,Windows 建議 \r\n)。

權限與路徑要求

  • 需 FILE 權限:GRANT FILE ON *.* TO 'user'@'host';
  • 目標路徑必須是 MySQL 服務進程**可寫**的目錄(非客戶端本地路徑)。
  • 文件不能已存在,否則報錯。

導入對應:LOAD DATA INFILE

LOAD DATA INFILE 'd:\\test.csv'
INTO TABLE users
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;  -- 跳過標題行

參數需與導出完全一致。LOCAL 關鍵字表示從客戶端讀取文件(需客戶端與服務器均允許)。

總結

  1. SELECT ... INTO OUTFILE 導出,LOAD DATA INFILE 導入,雙劍合璧。
  2. 中文環境**必須**在導出時 CONVERT(... USING gbk) 或導入時指定字符集,否則亂碼。
  3. 生產環境建議導出為標準 CSV(逗號分隔、雙引號包圍、CRLF 換行),兼容性最強。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved