90% 的亂碼源於:**匯出檔編碼 ≠ 匯入端預期編碼 ≠ 資料庫/表/欄位實際編碼** 三者不一致。
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 有缺陷。
.sql 檔。SET NAMES utf8mb4;# 方法一:命令列參數 (推薦)
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)。