MS SQL Server, PHP и UTF-8

Возникла задача получать данные из SQL Server в PHP.
Все бы ничего, но кодировка у MSSQL стоит SQL_Latin1_General_CP850_CI_AS.

Нужно получать данные в UTF-8.
Предполагаю два пути:
— Существование таблетки вида SET NAMES UTF-8. Существует ли нечто подобное в MSSQL?
— COLLATE каждого столбца во время запроса. COLLATE во что? Списки collation нашел, но ничего похожего на юникод не увидел.

Сейчас получаемые данные выглядят как знаки вопроса и подобрать кодировку для iconv под это дело не удается, да и не хотелось бы это делать через iconv.

p.s. SQL Server 8.0 — если не ошибаюсь, то это двухтысячный.
  • Вопрос задан
  • 21600 просмотров
Решения вопроса 1
pietrovich
@pietrovich
А каким, кстати, драйвером пользуетесь?
У меня при использовании SQL Server Driver for PHP никаких проблем с UTF-8 не возникает. Правда я пользую SQL Server 2008, но этот драйвер должен быть совместим и с 2000, емнип.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@plaha
можно collate в CYRILLIC_GENERAL_CI_AS а потом iconv(«cp1251», «UTF-8», $value)
Ответ написан
MastaEx
@MastaEx Автор вопроса
Вы не поверите… :-)
Весь затык оказался в том, что я ставил Native Client от 2005 сервера. Уж не знаю, куда я смотрел :-0
Поставил от 2008-го — все завелось.
С этим драйвером все работает так, как-будто и нет никаких заморочек с кодировками. Запросы с utf8 условиями, ответы тоже в utf8.
А по ссылке про Yii из-за бага/фичи Yii автор не получит некоторых специфических методов для MS SQL. Все-таки про sqlsrv Yii кое-где пока не знает, надо бы им сообщить…

Всем огромное спасибо!
Ответ написан
@MrCrock
Если Latin1 стандартная кодировка базы, но данные в ней должны храниться и писаться в UTF-8, то в PHP коде после подключения к базе должно помочь:

mysql_query('SET character_set_database = utf8');
mysql_query('SET NAMES utf8');
Ответ написан
@lavel
Сами столбцы какого типа? в MSSQL данные хранятся в юникоде с использованием UCS2 для NCHAR, NVARCHAR, NTEXT. Попробуйте сделать CAST as NVARCHAR например, или создать таблицу с таким типом и выбрать из нее.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы