萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 匯入還原亂碼終極解決:三步驟標準化流程

亂碼根因

90% 的亂碼源於:**匯出檔編碼 ≠ 匯入端預期編碼 ≠ 資料庫/表/欄位實際編碼** 三者不一致。

標準化三步驟法

步驟 1:建庫建表統一指定 utf8mb4

CREATE DATABASE `shegongku` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE TABLE `members` (
    `uid` MEDIUMINT(8) UNSIGNED NOT NULL DEFAULT 0,
    `username` VARCHAR(15) NOT NULL DEFAULT '',
    `password` VARCHAR(40) NOT NULL DEFAULT '',
    `salt` VARCHAR(16) DEFAULT NULL,
    `email` VARCHAR(60) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

⚠️ 建議直接用 utf8mb4,支援 Emoji,utf8 實為 utf8mb3 有缺陷。

步驟 2:SQL 檔編碼轉換 + 加入 SET NAMES

  1. 用 Notepad++、VS Code、UltraEdit 開啟 .sql 檔。
  2. 另存為 **UTF-8 (無 BOM)** 編碼。
  3. 檔案**第一行**插入:SET NAMES utf8mb4;

步驟 3:匯入指令帶上字元集參數

# 方法一:命令列參數 (推薦)
mysql -u root -p --default-character-set=utf8mb4 db_name < backup.sql

# 方法二:mysql shell 內執行
mysql> USE db_name;
mysql> SET NAMES utf8mb4;
mysql> SOURCE /path/backup.sql;

# 方法三:GUI 工具 (SQLyog、DataGrip、DBeaver)
# 直接複製 SQL 內容到編輯器執行,工具通常自動處理編碼

終端顯示亂碼 ≠ 資料亂碼

若資料庫內容正確,但終端顯示亂碼:

mysql> SET NAMES gbk;  -- 或 big5、utf8,視終端編碼而定

這僅影響**顯示**,不影響儲存。

進階排查清單

  • SHOW VARIABLES LIKE 'character_set%'; 確認 character_set_client/connection/results 均為 utf8mb4。
  • SHOW CREATE TABLE tbl; 確認表/欄位 CHARSET。
  • SELECT HEX(col), col FROM tbl LIMIT 1; 以十六進位檢視實際儲存位元組。
  • 應用端連線字串加 characterEncoding=utf8mb4 (JDBC) / charset=utf8mb4 (PDO/PHP)。
copyright © 萬盛學電腦網 all rights reserved