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

MySQL 中文亂碼徹底解決:字符集設定、連線參數與 PHP 配合最佳實踐

     編輯:PHP 綜合知識

字符集基礎知識

  • gb2312、gbk、utf8(實為 utf8mb3)、utf8mb4 均支援中文,gbk 涵蓋字符最多,utf8mb4 為現代標準(含 Emoji)。
  • 資料庫、資料表、欄位、連線均有獨立字符集設定,需保持一致。

檢視當前設定

mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | gb2312 |
| character_set_connection | gb2312 |
| character_set_database   | gb2312 |
| character_set_filesystem | binary |
| character_set_results    | gb2312 |
| character_set_server     | latin1 |
| character_set_system     | utf8   |
+--------------------------+--------+

關鍵參數說明

最常見亂碼原因

character_set_connection 與 character_set_results 不支援中文編碼。解決方法:

SET NAMES gbk;  -- 或 utf8 / utf8mb4

SET NAMES charset 等同於同時設定上述三個連線參數,最簡便有效。

PHP 端最佳實踐

<?php
$mysqli = new mysqli("localhost", "user", "pass", "dbname");
// 連線成功後立即設定
$mysqli->set_charset("utf8mb4"); // 推薦 utf8mb4

// PDO 寫法
$pdo = new PDO("mysql:host=localhost;dbname=dbname;charset=utf8mb4", "user", "pass");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
?>

資料庫/資料表建立建議

CREATE DATABASE mydb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE TABLE articles (
    id INT AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
    content TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci
) DEFAULT CHARSET=utf8mb4;

遷移舊資料庫

  1. 備份:mysqldump --default-character-set=latin1 dbname > backup.sql(以 latin1 導出避免雙重編碼)。
  2. 修改 SQL 檔:將 CHARSET=latin1 替為 CHARSET=utf8mb4。
  3. 匯入:mysql --default-character-set=utf8mb4 dbname < backup.sql。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數影響範圍
character_set_client客戶端發送 SQL 的編碼
character_set_connection伺服器接收後轉換的編碼
character_set_results伺服器回傳結果的編碼
character_set_database預設資料庫字符集
character_set_server伺服器預設字符集