кодирование JSON производит ошибку JSON UTF8 из MSSQL-SELECT

У меня есть раздражающая проблема с запросом базы данных к mssql. Если результат содержит специальные символы, такие как немецкий 'ä', я не могу использовать json_encode чтобы получить результат как JSON правильно.

json_last_error возвращение 5 что равно JSON_ERROR_UTF8. Я предполагаю, что база данных не возвращает значения, как UTF-8 закодирован. Коллекция базы данных *Latin1_General_CI_AS* и затронутые столбцы varchars.

php в MSSQL.charset конфигурации не имеет никакого эффекта.

Я читал, что пользователи mysql могут использовать mysql_query('SET CHARACTER SET utf8'); для правильного кодирования возвращаемых значений. Что я могу сделать, чтобы правильно получить значения для mssql?

подсказка - я не могу ничего изменить в базе данных.

2 ответов


перед кодированием JSON используйте utf8_encode() вокруг колонны.


вы можете просто установить это соединение также:

$result = sqlsrv_connect($hostname, array(
    'UID' => $username,
    'PWD' => $password,
    'Database' => $database,
    "CharacterSet" => "UTF-8"   // <---- here the magic happens 
));

для меня это более легкий путь.