首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 連接 MySQL 中文亂碼徹底解決:SET NAMES 與字符集一致性原則

     編輯:PHP 相關知識

亂碼根因

MySQL 連接層、數據庫表、PHP 頁面、HTML 輸出四者字符集不一致。MySQL 默認連接字符集為 latin1,若頁面為 UTF-8/GBK 而未聲明,中文將亂碼。

核心解決:連接後立即執行 SET NAMES

頁面編碼為 UTF-8(推薦)

$conn = mysql_connect($host, $user, $pass);
mysql_query("SET NAMES 'utf8'"); // 或 'utf8mb4' 支持 Emoji
mysql_select_db($db, $conn);

頁面編碼為 GBK/GB2312

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,或相反。
  • HTML Meta:<meta charset="UTF-8"> 必須在 <head> 首行。
  • 數據庫/表/列:建表時顯式指定 CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci。
  • PHP 7+:棄用 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。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved