許多PHP開發者在連接Microsoft SQL Server時,都會遇到一個令人困惑的問題:資料庫中的nvarchar字段明明儲存了完整資料,但透過PHP查詢取出時,字串長度卻神秘地被截斷為255個字元。這其實是PHP早期的MSSQL驅動程式預設行為所導致的相容性問題。
在MySQL中,早期版本的VARCHAR確實有255字元的長度限制,但MSSQL的NVARCHAR並無此限制。問題在於PHP的舊版MSSQL擴充套件(如mssql_*函式庫)在處理資料類型時,錯誤地將NVARCHAR視為VARCHAR並套用了255字元的截斷邏輯。
最直接有效的解決方案是在SQL查詢中使用CAST函式,將目標字段強制轉換為TEXT類型後再回傳:
SELECT CAST(目標字段 AS TEXT) FROM 表名
實際應用範例:假設article資料表中有個summary欄位為NVARCHAR類型,查詢語法應寫成:
SELECT CAST(summary AS TEXT) FROM article
CAST ( expression AS data_type )
雖然CAST轉TEXT能解決截斷問題,但建議採用更現代化的資料庫存取方式:
mssql.textlimit和mssql.textsize為較大值(如2147483647)SELECT *,減少不必要的資料傳輸採用適當的驅動程式與查詢寫法,才能從根本上避免此類資料截斷問題,確保應用程式穩定可靠。