utf8mb4 (MySQL 5.5.3+) 支援完整 Unicode (含 Emoji、補充字元),**舊 utf8 僅支援 BMP (3 位元組)**,新專案**強制 utf8mb4**。utf8mb4_general_ci (速度快) 或 utf8mb4_unicode_ci (準確)。-- 1. 建庫指定預設字元集
CREATE DATABASE IF NOT EXISTS my_db
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;
-- 2. 建表指定 (可省略,繼承資料庫預設)
CREATE TABLE my_table (
name VARCHAR(20) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
| 語言/框架 | 設定方式 |
|---|---|
| PHP (mysqli/PDO) | mysqli_set_charset($link, 'utf8mb4'); 或 PDO DSN charset=utf8mb4 |
| Java (JDBC) | URL jdbc:mysql://host/db?useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8mb4_general_ci |
| Python (PyMySQL) | charset='utf8mb4' 參數 |
| .NET (Connector/NET) | ConnectionString CharSet=utf8mb4 |
**必須在建立連線後、執行任何 SQL 前設定**,否則該連線會用 Server 預設字元集 (通常 latin1) 收發資料 → 亂碼根源。
<meta charset="utf-8">
Content-Type: text/html; charset=utf-8
mysqldump --default-character-set=latin1 -h localhost -u root -p db_name --tables old_table > old.sqliconv -f gb2312 -t utf-8 -c old.sql > new.sqliconv -t utf-8 -c old.sql > new.sqlSET NAMES utf8mb4;mysql --default-character-set=utf8mb4 -h localhost -u root -p db_name < new.sqllatin1 (二進位透傳),**不要用 gb2312/gbk**,MySQL 對多位元組字元集的排序/比較支援有限。BINARY 屬性強制二進位比較:name VARCHAR(20) BINARY NOT NULL DEFAULT ''