MySQL 表編碼轉換是資料庫管理中常見且棘手的問題,尤其在跨版本遷移或整合異構系統時,字元集不匹配往往導致資料顯示亂碼。本文將詳細介紹一套經實戰驗證的六步法,助您徹底解決 MySQL 表編碼轉換難題。
轉換的關鍵在於「先建結構、後導資料、中間轉碼」三階段。必須確保目標資料庫、資料表、連線字元集全數統一為 UTF-8,否則極易在匯入階段產生不可逆的資料損壞。
使用 phpMyAdmin 或 mysqldump 匯出僅含結構的 SQL:
./mysqldump -d DB_Dig > /usr/local/tmp/tables.sql
將產出的 CREATE TABLE 陳述式中的 CHARSET=latin1 修改為 CHARSET=utf8,並在目標資料庫 newdbname 執行建立表結構。
mysql -hlocalhost -uroot -p*** dbname
在 MySQL 提示符下執行:
SELECT * FROM tbname INTO OUTFILE '/usr/local/tbname.sql';
此步驟將資料以預設字元集寫入檔案,為後續轉碼做準備。
⚠️ 千萬不可略過此步! 使用 UltraEdit、Notepad++ 或 VS Code 等支援編碼轉換的編輯器,將 tbname.sql 轉為 UTF-8 無 BOM 格式。UltraEdit 路徑:轉換 → ASCII 到 UTF-8 (Unicode 編輯);其他編輯器請選「另存新檔」並指定 UTF-8 無 BOM。
SET character_set_database=utf8;
此設定讓 MySQL 在下一步讀取檔案時,以 UTF-8 解讀檔案內容,避免雙重編碼錯誤。
LOAD DATA INFILE 'tbname.sql' INTO TABLE newdbname.tbname;
執行完成後,請立即抽樣檢查中文欄位是否正常顯示。
SELECT HEX(column) FROM table LIMIT 10; 檢查位元組序列是否符合 UTF-8 編碼規則。pt-online-schema-change 類工具。