2014-09-29 152 views
0

從MSSQL數據庫中選擇文本時遇到問題。我通過ODBC與SQL Server Native Client 10.0驅動程序進行連接。數據存儲在一個文字UTF-8字符,我需要用PHP正確輸出它,如果您好奇這是一個下載腳本。我已經嘗試了幾個技巧和技巧,像轉換字符編碼,但沒有一個真正起作用。我不得不提到,我無法改變數據庫中的任何東西。使用ODBC從MSSQL獲取UTF-8

<?php 
odbc_connect(); 
odbc_execute(); 
odbc_fetch_row(); 
header("Content-type: application/octet-stream"); 
echo odbc_result(...., 'ntext-column'); 
+0

'SELECT CAST(「NTEXT列」作爲文本)作爲new_column_name FROM your_sql_server_table' – Daan 2014-09-29 13:03:55

+0

謝謝,但它並沒有與我要支持中國文字工作。 – 2014-09-29 13:09:22

+0

那麼你必須在那裏找到解決方案。 ntext和PHP不能相互協作。 – Daan 2014-09-29 13:12:03

回答

1

最後我得到了解決方案。 您必須在選擇查詢中將列轉換爲VARBINARY。如果你有一個ntext列,你必須先將它轉換爲nvarchar。

SELECT CAST(CAST( AS NVARCHAR(MAX))AS VARBINARY(MAX))AS FROM ...

然後,你必須啓用用於odbc的二進制模式並設置二進制數據的預期長度。最後,您必須將字符集UCS-2LE的二進制數據轉換爲UTF-8,然後完成。

... 
odbc_execute($query, ...); 
odbc_longreadlen($query, 1000000); // Set the expected length to 1 Megabyte 
odbc_binmode($query, ODBC_BINMODE_RETURN); // Enable binary mode 
... // Fetch the row 
$data = iconv('UCS-2LE', 'UTF-8', odbc_result($query, 'column'));