У меня проблемы с выделением текста из базы данных 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');
Наконец-то я получил решение.
Вы должны привести свой столбец к VARBINARY в запросе выбора. Если у вас есть столбец ntext, вы должны сначала привести его к nvarchar.
ВЫБЕРИТЕ CAST (CAST (колонка AS NVARCHAR (MAX)) AS VARBINARY (MAX)) AS колонка ОТ …
Затем вы должны включить двоичный режим для 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'));
Других решений пока нет …