У меня есть некоторые проблемы с подключением к моей Vertica.
Я использую драйвер PHP и PDO ODBC (thrue unixODBC).
Когда я подключаюсь к Vertica через isql и выбираю записи из таблицы, все данные имеют точную кодировку – правильно печатаются поля с UTF-8 (без символов ASCII, например, кириллицы).
Если вы подключаетесь из Интернета с помощью PHP-скрипта и выполняете тот же запрос, что поля имеют некоторые символы Unicode, такие как этот \ u001A \ u001A \ u001A \ u001A
Каждый \ u001A представляет один символ не ASCII и не может быть напечатан.
Я обнаружил, что эта проблема возникает только при запуске скрипта из Интернета (веб-сервер Apache2).
Поэтому, если вы запускаете скрипт с консоли, все в порядке.
Но если вы сделаете это из localhost / test.php, мы получим эту проблему.
Это происходит на x32 и x64 версиях клиентских драйверов Vertica для Linux и Windows.
Как Apache может влиять на результаты, которые мы получаем от Vertica?
Убедитесь, что в DriverManagerEncoding=UTF-16
имеется DriverManagerEncoding=UTF-16
. Конечно, возможно, вам нужно попробовать другое значение (возможно, UTF-8
или UTF-32
), но для меня он работал только с UTF-16
. Он, кажется, полностью не зависит от того, какую кодировку использует ваш клиент. Я думаю, что unixODBC делает какое-то преобразование внутри, а драйвер Vertica должен производить любую кодировку, которую ожидал менеджер драйверов.
Нужно добавить настройки локали прямо к PHP-коду, и все начинает работать
setlocale(LC_ALL, 'en_US.UTF-8');