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

MSSQL ntext 欄位導致 PHP mssql_query 失效的解決方案

     編輯:PHP 相關知識

錯誤現象

Warning: mssql_query() [function.mssql-query]: 
message: 無法用 DB-Library 或 ODBC 3.7 或更早版本將 ntext 資料發送到客戶端。 (severity 16)
Query failed

根本原因

PHP 內建 mssql 擴展基於舊版 FreeTDS (DB-Library),不支援 Unicode 大物件型別:

  • ntext、nvarchar(max)、xml 等 Unicode LOB 型別
  • 僅支援非 Unicode 對應型別:text、varchar(max)

三種解決方案

方案一:資料庫層面修改型別(推薦)

ALTER TABLE your_table ALTER COLUMN your_column TEXT;

優點:零代碼修改,效能最佳。缺點:需評估現有 Unicode 資料是否會截斷/轉換異常。

方案二:查詢層面強制轉換

SELECT CAST(ntext_column AS TEXT) AS content FROM your_table;

或使用 CONVERT:

SELECT CONVERT(TEXT, ntext_column) AS content FROM your_table;

適用於無法修改表結構的場景。

方案三:升級驅動至 SQLSRV / PDO_SQLSRV

微軟官方驅動完整支援所有資料型別:

<?php
$conn = sqlsrv_connect($serverName, $connectionInfo);
$sql = "SELECT ntext_column FROM your_table";
$stmt = sqlsrv_query($conn, $sql);
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
    // 直接讀取 ntext,無需轉換
    echo $row['ntext_column'];
}
?>

遷移優勢:支援參數化查詢、交易、Always Encrypted、可用性群組等企業級特性。

遷移檢查清單

  • [ ] 替換所有 mssql_* 函數為 sqlsrv_* 或 PDO
  • [ ] 連線字串格式調整(支援 UID/PWD、Trusted_Connection、MultiSubnetFailover)
  • [ ] 日期/時間型別處理差異(DateTime 物件 vs 字串)
  • [ ] 錯誤處理機制重構(sqlsrv_errors() 陣列結構)
  • [ ] 測試中文資料完整性
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved