PHP 的 mssql 擴展不支援 ntext / nvarchar 等 Unicode 欄位,直接查詢會回傳空值。
將 ntext 改為 text,nvarchar 改為 varchar。
php.ini 設定; 原設定
mssql.textlimit = 4096
mssql.textsize = 4096
; 修改為最大值
mssql.textlimit = 2147483647
mssql.textsize = 2147483647
重啟 Web 伺服器生效。
-- 錯誤寫法
SELECT title, content FROM article;
-- 正確寫法
SELECT CONVERT(VARCHAR(255), title) AS title,
CONVERT(TEXT, content) AS content
FROM article;
將 Unicode 欄位在查詢層轉為非 Unicode 型別,PHP 即可正常讀取。
<?php
include('adodb/adodb.inc.php');
$conn = NewADOConnection('odbc_mssql');
$conn->Connect("Driver={SQL Server};Server=localhost;Database=mydb;", 'user', 'pass');
?>
ADOdb 內建處理 Unicode 欄位,無須修改 php.ini。
優先考慮方案三(SQL 轉型),不影響資料結構且相容性最好;若無法修改 SQL,再嘗試方案二或四。