Arhn - архитектура программирования

Неправильная кодировка при запросе из Apache/PHP

У меня проблемы с подключением к моей Vertica.
Я использую PHP и драйвер ODBC PDO (через unixODBC).
Когда я подключаюсь к Vertica через isql и выбираю записи из таблицы, все данные нормально кодируются - поля с UTF-8 (символы, отличные от ASCII, например кириллица) печатаются правильно.
Если подключиться из Интернета с помощью PHP-скрипта и выполнить тот же запрос, в полях есть некоторые символы Юникода, подобные этому 
Каждый  представляет собой один символ, отличный от ASCII, и не может быть напечатан.

Я обнаружил, что эта проблема возникает только при запуске скрипта из Интернета (веб-сервером является Apache2).
Так что, если вы запускаете скрипт из консоли, все в порядке.
Но если вы делаете это с локального хоста /test.php, мы получили проблему.
Это происходит в версиях x32 и x64 клиентских драйверов Vertica для Linux и Windows.
Как Apache может повлиять на конечные результаты, которые мы получаем от Vertica?


  • Это определенно выше моей зарплаты. Я настоятельно рекомендую привлечь Vertica. Это похоже на ошибку в драйвере, которая потребует некоторой отладки с их стороны. Не очень красивый ответ для сайта, но я бы сделал это в спешке. 01.08.2013

Ответы:


1

Убедитесь, что в вашем файле vertica.ini есть DriverManagerEncoding=UTF-16. Конечно, возможно, вам нужно попробовать другое значение (может быть, UTF-8 или UTF-32), но для меня это сработало только с UTF-16. Кажется, это совершенно не зависит от того, какую кодировку использует ваш клиент. Я думаю, что unixODBC выполняет какое-то внутреннее преобразование, и драйвер Vertica должен создавать ту кодировку, которую ожидал менеджер драйверов.

02.08.2013
  • Я пробую все кодировки для DriverManagerEncoding - безрезультатно. Вы можете выбрать данные из Vertica с символом, отличным от ASCII, в вашей системе из Интернета? (Апач/PHP) 03.08.2013

  • 2

    Необходимо добавить настройку локали непосредственно в код PHP, и все начнет работать.

    setlocale(LC_ALL, 'en_US.UTF-8');
    
    06.08.2013
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..