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

PHP 連接 MSSQL 查詢亂碼終極解決方案

     編輯:PHP 相關知識

PHP 連接 MSSQL 查詢亂碼終極解決方案

PHP 連接 SQL Server 時出現亂碼,本質是字符集不匹配。涉及數據庫、表、字段、PHP 文件、連接層、輸出頁面六個環節,任一環節編碼不一致即會導致亂碼。本文提供四種針對性解決方案及完整排查清單。

方案一:修改 php.ini 全局配置

;mssql.charset = "ISO-8859-1"
mssql.charset = "GBK"  ; 或 UTF-8,視頁面編碼而定

修改後需重啟 Apache/ PHP-FPM 生效。適用於所有 mssql_* 函數連接。

方案二:代碼層手動轉碼

$data = iconv('GB2312', 'UTF-8', $data);
// 或
$data = mb_convert_encoding($data, 'UTF-8', 'GBK');

靈活控制單個字段或查詢結果,適合無法修改 php.ini 的虛擬主機環境。

方案三:ADO 連接指定 UTF-8

$conn = new COM("ADODB.Connection", NULL, CP_UTF8) or die("Cannot start ADO");
$conn->Open("Driver={SQL Server};Server=192.168.22.40;Database=sugarcrm_db;UID=sa;PWD=123456;");

COM 組件方式連接時,第三個參數 CP_UTF8 強制使用 UTF-8 代碼頁,從連接層解決編碼問題。

方案四:完整頁面示例(ADO + UTF-8)

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<?php
$conn = new COM("ADODB.Connection", NULL, CP_UTF8) or die("Cannot start ADO");
$conn->Open("Driver={SQL Server};Server=192.168.22.40;Database=sugarcrm_db;UID=sa;PWD=123456;");
$rs = $conn->Execute('SELECT * FROM accounts') or die("error query");
?>
<table border="1">
<tr><th>ID</th><th>Title</th></tr>
<?php
while (!$rs->EOF) {
    echo '<tr>';
    echo '<td>' . $rs->Fields['id']->Value . '</td>';
    echo '<td>' . $rs->Fields['name']->Value . '</td>';
    echo '</tr>';
    $rs->MoveNext();
}
?>
</table>
<?php
$rs->Close(); $conn->Close(); $rs = null; $conn = null;
?>
</body>
</html>

亂碼排查四步法(必查清單)

  1. 數據庫三層編碼:庫、表、字段編碼是否統一(如全為 Chinese_PRC_CI_AS 或 Latin1_General_CI_AS)。
  2. PHP 文件編碼:用編輯器確認文件保存為 UTF-8 無 BOM 或 GBK,與頁面聲明一致。
  3. 連接層設置:執行查詢前發送 SET NAMES utf8(MySQL習慣)或對應 MSSQL 設置碼頁。
  4. 瀏覽器聲明:HTML 頭部 `` 或 HTTP Header `Content-Type: text/html; charset=utf-8`。

常見坑點提醒

  • MSSQL 預設常為 GBK/CP936,若頁面為 UTF-8 必須轉碼。
  • `iconv` 來源編碼常寫錯:實際可能是 `GBK` 而非 `GB2312`,建議用 `mb_detect_encoding` 自動檢測。
  • Windows 環境下 `php_mssql.dll` 已棄用,推薦使用 `sqlsrv` 或 `PDO_SQLSRV` 驅動,原生支持 UTF-8。

總結

「源頭統一、傳輸指定、輸出聲明」三步走,徹底解決 PHP-MSSQL 亂碼。優先推薦方案三(ADO+CP_UTF8)或升級至 sqlsrv 驅動,避免層層轉碼帶來的性能損耗與維護成本。

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