使用ODBC从MSSQL获取UTF-8


Get UTF-8 from MSSQL with ODBC

我在从MSSQL数据库中选择文本时遇到问题。我通过ODBC与SQL Server Native Client 10.0驱动程序进行连接。数据存储在ntext列中,该列包含UTF-8字符,我需要用PHP正确输出它,如果你好奇的话,这是一个下载脚本。我尝试了一些技巧和技巧,比如转换字符编码,但都没有真正奏效。

我不得不提一下,我无法更改数据库中的任何内容。

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

最后我得到了解决方案。您必须在select查询中将列强制转换为VARBINARY。如果您有一个ntext列,则必须首先将其强制转换为nvarchar。

选择CAST(CAST(AS NVARCHAR(MAX))AS VARBINARY(MAX)。。。

然后,您必须为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'));