Проблема кодировки символов в PDO_ODBC

При доступе к базе данных Microsoft SQL из PHP с использованием PDO_ODBC со следующим кодом возникает проблема с кодировкой. При выводе текста из БД искажается.

$dsn = "odbc:DRIVER={SQL Server};SERVER=$hostname;DATABASE=$database;charset=UTF-8";
$pdo = new PDO($dsn,$username,$password);
$sql = "SELECT text FROM atable";
$result = $PDO->query($sql);
while($data = $result->fetchObject()){
  $values[] = $data->text; 
}
dpm($values);

garbled output
(источник: bayimg.com )

Это сделано из модуля Drupal. Все в Drupal предназначено для работы с UTF-8. Самым чистым решением будет возможность извлечения данных из базы данных в UTF-8 или преобразовать его в UTF-8 перед выводом.

Я попробовал их безуспешно.

  • $ dsn = "odbc: DRIVER = {SQL Server}; SERVER = $ hostname; DATABASE = $ database; client_charset = utf-8"
  • $ dsn = "odbc: DRIVER = {SQL Server}; SERVER = $ hostname; DATABASE = $ database; charset = utf-8 "
  • $ pdo-> exec ('SET NAMES utf8') после нового PDO (.. .)
  • $ pdo-> exec ('SET CHARACTER SET utf8'); после нового PDO (...)

PS: код в настоящее время разрабатывается в Windows, но он должен работать в GNU / Linux тоже.

7
задан Glorfindel 5 August 2019 в 23:10
поделиться