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

PHP 連接 MSSQL 出現亂碼?三大解決方案徹底搞定編碼問題

     編輯:PHP 相關知識

在 PHP 開發過程中,連接 Microsoft SQL Server (MSSQL) 時遇到查詢結果顯示亂碼,是許多開發者常面臨的棘手問題。這本質上是字元編碼不一致導致的。本文將系統整理三種行之有效的解決方案,並提供完整代碼範例,助你快速排除故障。

核心原因分析

亂碼產生的根本原因在於:PHP 腳本編碼、資料庫儲存編碼、資料表/欄位編碼、連接層編碼、瀏覽器顯示編碼這五個環節中,任一環節編碼不一致即會導致資料解析錯誤。解決核心在於「全鏈路編碼統一」。

方案一:修改 php.ini 全域配置(推薦用於統一環境)

透過調整 PHP 核心配置文件,設定 MSSQL 擴展預設使用的字元集。此法一勞永逸,適合專案編碼統一為 GBK 或 UTF-8 的場景。

; 尋找並修改 php.ini 中的以下行(去掉分號啟用)
;mssql.charset = "ISO-8859-1"
mssql.charset = "GBK"  ; 或根據專案需求設為 "UTF-8"

注意:修改後必須重啟 Web 伺服器(如 Apache/Nginx + PHP-FPM)方能生效。

方案二:程式碼層面即時轉碼(靈活應對混合編碼)

若無法修改 php.ini,或專案中不同頁面編碼不一,可在讀取資料後、輸出前使用 iconv() 強制轉換。

<?php
// 假設資料庫儲存為 GB2312/GBK,頁面為 UTF-8
$data = iconv('GB2312', 'UTF-8', $row['field_name']);
// 若反向寫入資料庫
$sql_data = iconv('UTF-8', 'GB2312', $_POST['input']);
?>

此法雖靈活,但需在每個查詢/寫入點處理,維護成本較高。

方案三:使用 ADO 連接並指定 CodePage(Windows 環境首選)

在 Windows 平台,利用 COM 組件建立 ADODB.Connection,於連接瞬間指定 CP_UTF8,從驅動層解決編碼傳輸問題,最為穩健。

<?php
// 建立 ADO 連接,第三參數 CP_UTF8 指定 UTF-8 傳輸
$conn = new COM("ADODB.Connection", NULL, CP_UTF8) or die("Cannot start ADO");

// 連接字串範例 (SQL Server)
$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");

// 輸出 HTML 表格
echo '<table border="1"><tr><th>ID</th><th>Title</th></tr>';
while (!$rs->EOF) {
    echo '<tr>';
    echo '<td>' . $rs->Fields['id']->Value . '</td>';
    echo '<td>' . $rs->Fields['name']->Value . '</td>';
    echo '</tr>';
    $rs->MoveNext();
}
echo '</table>';

// 釋放資源
$rs->Close();
$conn->Close();
$rs = null;
$conn = null;
?>

完整頁面範例請參考上方代碼,已包含 <meta charset="utf-8"> 聲明。

總結:防亂碼四大鐵律

  1. 資料庫三層統一:資料庫、資料表、欄位編碼必須一致(建議全用 utf8mb4)。
  2. 腳本檔案編碼:確保 PHP 檔案儲存編碼與頁面聲明一致(IDE 如 VS Code、PhpStorm 可見右下角切換)。
  3. 連接層設定:執行查詢前發送 SET NAMES utf8 (MySQL) 或使用 ADO CP_UTF8 (MSSQL)。
  4. 前端聲明:HTML 頭部必須包含 <meta charset="utf-8">。

遵循以上原則,PHP 操作 MSSQL 亂碼問題將不再困擾你的專案開發。

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