中文存入顯示為 ???、乱码、锟斤拷,查詢結果與存入不一致。
Chinese simplified (zh-utf-8)UTF-8 Unicode (utf8)utf8_general_ci(或 utf8mb4_general_ci)CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE TABLE mytbl (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
關鍵點: 表級、列級均可單獨覆蓋,建議統一庫/表/列均用 utf8mb4。
-- PHP (mysqli)
$mysqli->set_charset('utf8mb4');
-- PHP (PDO)
$pdo = new PDO('mysql:host=localhost;dbname=mydb;charset=utf8mb4', 'user', 'pass');
-- Java (JDBC URL)
jdbc:mysql://localhost:3306/mydb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
-- Python (PyMySQL)
conn = pymysql.connect(charset='utf8mb4')
my.cnf[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4' # 不影響 root 等超級用戶
重啟驗證:
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
chcp 65001 / 終端設置)SET NAMES utf8mb4SHOW CREATE TABLE)file -i / Notepad++ 檢查)utf8mb4 ≠ utf8。MySQL
utf8實為utf8mb3(最多 3 字節),無法存儲 Emoji、生僻字。全鏈路統一utf8mb4是 2024+ 的標準配置。