MySQL 5.0.16 存儲/讀取中文出現亂碼,根因是各層字符集不一致。
| 層級 | 設置項 | 推薦值 |
|---|---|---|
| phpMyAdmin 介面語言 | Language | Chinese Simplified (zh-utf-8) |
| MySQL 字符集 | MySQL charset | UTF-8 Unicode (utf8) |
| MySQL 連接校對 | Connection collation | gbk_chinese_ci |
| 創建數據庫 | Collation | gbk_chinese_ci |
| 建表語句 | DEFAULT CHARSET | gbk |
| 字段級校對 | varchar 等 | gbk_chinese_ci |
| 應用代碼連接 | SET CHARACTER SET | GBK(Linux 必需,Windows 可省) |
-- 建表示例
CREATE TABLE `t` (
`c` varchar(100) COLLATE gbk_chinese_ci
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
-- PHP 連接後執行
$db->query("SET CHARACTER SET GBK");
SET CHARACTER SET GBK 等價於設置 character_set_client、character_set_connection、character_set_results 為 GBK,屬於 Connection Character Sets and Collations 層面。-- 全鏈路 UTF-8
CREATE DATABASE db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE t (c VARCHAR(100)) CHARACTER SET utf8mb4;
-- 連接執行
SET NAMES utf8mb4; -- 等價於 SET CHARACTER SET utf8mb4 + COLLATE
utf8mb4 支持完整 Unicode(含 Emoji),utf8mb4_unicode_ci 排序更準確。