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

Dreamweaver 連接 MySQL 中文亂碼一行解決:SET NAMES 指定字符集

     編輯:PHP 綜合知識

現象

DW 內建 PHP/MySQL 行為生成的頁面,讀取數據庫中文顯示為亂碼(如「????」或「涓婁竴娆℃垜」)。

根因

MySQL 連接建立後,默認字符集為 latin1,而表/數據實為 utf8 或 gbk,導致服務端按 latin1 發送、客戶端按 utf8/gbk 解碼,產生映射錯位。

修復代碼(放在連接代碼之後、任何查詢之前)

<?php
// 連接代碼由 DW 自動生成
$conn = mysql_connect('localhost', 'user', 'pass') or die(mysql_error());
mysql_select_db('dbname', $conn);

// ===== 關鍵一行 =====
// 數據庫/表/字段為 UTF-8
mysql_query("SET NAMES 'utf8'", $conn);

// 或為 GBK
// mysql_query("SET NAMES 'gbk'", $conn);
?>

原理解析

SET NAMES 'charset' 等價於執行三條語句:

SET character_set_client = charset;
SET character_set_results = charset;
SET character_set_connection = charset;

統一了「客戶端發送」、「服務端返回」、「連接層轉換」三端字符集,徹底消除亂碼。

現代最佳實踐(PDO / mysqli)

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

// mysqli
$mysqli = new mysqli('localhost', 'user', 'pass', 'db');
$mysqli->set_charset('utf8mb4'); // 推薦 utf8mb4 兼容 Emoji
?>
  • DW CS6 及更早版本生成代碼基於已棄用的 mysql_* 擴展,新項目請直接改寫為 PDO/mysqli。
  • 資料庫、表、欄位字符集統一為 utf8mb4,連接層同步設置,全鏈路無轉碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved