MySQL 連接層、數據庫表、PHP 頁面、HTML 輸出四者字符集不一致。MySQL 默認連接字符集為 latin1,若頁面為 UTF-8/GBK 而未聲明,中文將亂碼。
$conn = mysql_connect($host, $user, $pass);
mysql_query("SET NAMES 'utf8'"); // 或 'utf8mb4' 支持 Emoji
mysql_select_db($db, $conn);
mysql_query("SET NAMES 'gbk'"); // 或 'gb2312'
$connection = mysql_connect($localhost, $username, $password);
mysql_query('SET NAMES utf8'); // 必須在 select_db 之前
$db_selected = mysql_select_db($database, $connection);
if (!$db_selected) {
die('Can\'t use db: ' . mysql_error());
}
修改 MySQL 配置文件 my.cnf/my.ini:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect = 'SET NAMES utf8mb4'
重啟 MySQL 服務後,新連接默認使用 UTF-8MB4,無需每次 SET NAMES。
charset=utf-8 但 SET NAMES gbk,或相反。<meta charset="UTF-8"> 必須在 <head> 首行。CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci。mysql_*,改用 mysqli::set_charset('utf8mb4') 或 PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4'。SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
確保 character_set_client、connection、results、database、server 均為 utf8mb4。