簡體   English   中英

使用ODBC從MSSQL獲取UTF-8

[英]Get UTF-8 from MSSQL with ODBC

我從MSSQL數據庫中選擇文本時遇到問題。 我正在通過ODBC與SQL Server Native Client 10.0驅動程序進行連接。 數據存儲在帶有UTF-8字符的ntext列中,如果您好奇它是一個下載腳本,則需要使用PHP正確輸出。 我嘗試了幾種技巧和技巧,例如轉換字符編碼,但沒有一個真正起作用。

我不得不提到,我無法更改數據庫中的任何內容。

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

終於我找到了解決方案。 您必須在選擇查詢中將列轉換為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'));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM