我在从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');
答案 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'));