首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

PHP 連接遠程 MySQL 5.1 並解決中文亂碼:SET NAMES 與字符集全鏈路配置

     編輯:MySQL 資料庫相關知識

遠程連線基礎代碼

$serverName = 'db4free.net:3306';
$dbName     = 'dbname';
$dbUser     = 'username';
$dbPass     = 'password';

$link = mysql_connect($serverName, $dbUser, $dbPass);
mysql_select_db($dbName, $link);

注意:mysql_* 函數已棄用,新專案請使用 mysqli 或 PDO。

中文亂碼根因與解決

MySQL 4.1+ 引入字符集機制,PHP 預設連線字符集為 latin1,若資料庫/表/欄為 gb2312 或 utf8,讀寫必須顯式宣告連線字符集。

核心修正:連線建立後立即執行

mysql_query("SET NAMES 'gb2312'", $link);  // 或 'utf8'
// 等價於:
// SET character_set_client = gb2312;
// SET character_set_results = gb2312;
// SET character_set_connection = gb2312;

完整連線範例

$link = mysql_connect('localhost', 'root', 'password');
mysql_query("SET NAMES 'gb2312'", $link);
mysql_select_db('test', $link);

全鏈路字符集一致性檢查表

層級配置項建議值
資料庫CREATE DATABASE ... CHARSET=gb2312gb2312 / utf8mb4
資料表CREATE TABLE ... CHARSET=gb2312同上
欄位col VARCHAR(50) CHARSET gb2312同上
連線SET NAMES 'gb2312'同上
PHP 腳本header('Content-Type: text/html; charset=gb2312');同上
HTML 頁面<meta charset="gb2312">同上

進階:mysqli / PDO 寫法

// mysqli
$mysqli = new mysqli($host, $user, $pass, $db, $port);
$mysqli->set_charset('gb2312');

// PDO
$pdo = new PDO("mysql:host=$host;port=$port;dbname=$db;charset=gb2312", $user, $pass);

總結

SET NAMES 'charset' 是解決 PHP-MySQL 中文亂碼的「一鍵鍵」,但必須配合資料庫/表/欄/頁面編碼全鏈路一致。新專案強烈建議統一 **UTF-8 (utf8mb4)**,避免 GB2312 無法儲存 Emoji/生僻字。

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