@SlavaMorg

Как побороть кракозябры при подключении к MsSql?

Дали доступ к внешней БД на mssql. Ну не знаю я его. Не понимаю, как там явно указать кодировку.
Русские строки приходят в виде "??? ?????". Именно вопросики. БД не моя, как-то изменить её я не могу. Могу только читать. Гугл не помог. Как я понял, set names в mssql нету. Куда прописывать collate так и не разобрался. Он вроде для сортировки нужен, а мне бы просто строку в таблице прочитать.
Делал запрос в INFORMATION_SCHEMA.COLUMNS. Вернул вот такие параметры об этом поле:
'DATA_TYPE' => 'nvarchar'
'CHARACTER_SET_NAME' => string 'UNICODE'
'COLLATION_NAME' => string 'Latin1_General_CI_AI'

Работаю на php. Соединение устанавливаю вот так:
$dbh = new PDO("dblib:host=hostname:port;dbname=db", "login", "pass");

Пробовал в первый параметр добавить charset - не помогает. Вставлял utf8 и самые разные "начертания" Latin1_General_CI_AI.
Ну sql запрос примитивнейший:
SELECT TOP 100 * FROM Discounts;
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 2
@d-stream
Готовые решения - не подаю, но...
@Barmunk
dblib сам по себе не очень хорошо работает с кириллицей, нужно постоянно прогонять результаты через iconv, искать нужную локаль и т.д. Поэтому на сервере ставят freeTDS, который умеет на лету конвертировать данные.

В конфиге указывается подключение:
[SERV_UTF8]
    host = serv.site.ru
    port = 1433
    tds version = 8.0
    client charset = UTF-8


а в php
$dbh = new PDO("dblib:host=SERV_UTF8;dbname=db",  $username, $pw);


либо используйте драйвер SQLSRV, в котором таких проблем уже нет. Его можно найти на официальном сайте Майкрософт.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы