在使用 PHP 5 開發時,若 MySQL 查詢結果全部顯示為「??????」,通常是因為字符集設定不正確所致。即使在安裝 MySQL 5 時已將預設字符集設為 gb2312,仍可能出現亂碼。
關鍵在於建立資料庫連線後,立即執行一條與所設字符集相符的 SET NAMES 語句。例如若資料庫使用 gb2312,則執行 SET NAMES 'gb2312'。
以下是一個封裝好的連線函數,演示如何在連線成功後自動設定字符集:
function sql_connect() {
global $MySQL_HOST, $MySQL_USER, $MySQL_PASSWORD, $MySQL_DATABASE;
$connection = @mysql_connect($MySQL_HOST, $MySQL_USER, $MySQL_PASSWORD)
or startUpError('<p>Could not connect to MySQL database.</p>', 'Connect Error');
if (!mysql_select_db($MySQL_DATABASE)) {
include 'install.php';
doInstall();
mysql_select_db($MySQL_DATABASE)
or startUpError('<p>Could not select database: ' . mysql_error() . '</p>', 'Connect Error');
}
// 關鍵步驟:設定連線字符集
sql_query('SET NAMES "gb2312"'); // sql_query 為自訂的查詢執行函數
return $connection;
}
透過這樣的處理,即可確保 PHP 與 MySQL 之間的資料傳輸使用一致的編碼,從而徹底解決亂碼問題。