MSSQL в латинице1, PHP в UTF-8

В настоящее время мы делаем приложение PHP с codeigniter, и у нас есть доступ к 2 базам данных, одна в UTF-8 (наш MySQL) и одна в Latin1 (SQL_Latin1_General_CP1_CI_AS в MSSQL), эта база данных latin1 доступна только для чтения, у нас нет контроль над ним, поэтому мы не можем его изменить.

Наша проблема заключается в том, что некоторые латинские символы отображаются как черные ромбы.

Мы установили соединение с базой данных на codeigniter как:

'dbdriver' => 'mssql',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci'

И наш PHP имеет следующую кодировку:

mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_language('uni');
mb_regex_encoding('UTF-8');

И наши файлы также сохраняются в кодировке UTF8.

Мы думали, что, поскольку latin1 является подмножеством utf8, проблем не будет, но появляются черные ромбы. Одним из найденных решений является использование utf8_encode непосредственно перед отображением текста, полученного из базы данных MSSQL, но это похоже на XGH, должен быть лучший способ.

Итак, в основном вопрос заключается в том, как выбрать и показать UTF8 (потому что php - это UTF8) из базы данных, которая находится на Latin1?

Спасибо за ваше время


person Matheus Mannes    schedule 13.04.2018    source источник


Ответы (1)


Я думаю, пункт COLLATE utf8_general_ci вам поможет, попробуйте с этим.

Пример использования

ВЫБЕРИТЕ столбец ИЗ теста ORDER BY столбец COLLATE utf8_general_ci ASC

обратитесь по этой ссылке https://www.mssqltips.com/sqlservertip/4395/understanding-the-collate-databasedefault-clause-in-sql-server/

person Anfath Hifans    schedule 15.04.2018
comment
Нет, не работает, utf8_general_ci не известен MSSQL. Может быть, это мой драйвер БД? Я проверил, и его mssql freetds. - person Matheus Mannes; 16.04.2018