使用ODBC从MSSQL获取UTF-8

时间:2014-09-29 13:02:05

标签: php sql-server character-encoding 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');

1 个答案:

答案 0 :(得分:1)

最后我得到了解决方案。 您必须在select查询中将列转换为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'));