Как изменить кодировку символов соединения PDO/SQLite в PHP?

У меня небольшая проблема с приложением php-gtk, которое продолжает работать со строками, отличными от utf8, я обнаружил, что проблема заключается в соединении с базой данных, даже если база данных должна быть в UTF-8.

Я пробовал с "SET CHARACTER SET utf8" (способ MySQL) и "SET NAMES UTF8", и ничего не произошло (нет никакой информации ни об одной из этих команд в "Язык запросов, понятный SQLite", так что я не удивлен этим).

PD: Возможно, соединение уже в UTF-8, а данные нет, но если есть способ изменить кодировку соединения, этот вопрос все равно будет полезен.


person levhita    schedule 04.11.2008    source источник


Ответы (1)


Насколько я могу судить, SQLite имеет только одну настройку для кодировки, которая находится на на уровне базы данных. Вы не можете изменить кодировку в соединении.

В C API есть два разных способа открытия соединения: либо в UTF-8, либо в UTF. -16. Я бы ожидал, что модуль PHP SQLite (и, следовательно, PDO) просто использует версию UTF-8. Если это правильно, я ожидаю, что соединение SQLite всегда будет UTF-8. Это означает, что вы должны вручную кодировать/декодировать строки с помощью utf8_encode. /utf8_decode.

См. также: http://www.alberton.info/dbms_charset_settings_explained.html

person troelskn    schedule 04.11.2008
comment
Я обнаружил, что SQLite не привередлив к тексту, который он получает, и более чем счастлив обрабатывать текстовые строки, которые не нормализованы или даже не имеют правильного формата UTF-8. программисты, которые хотят хранить данные IS08859, могут это сделать... Итак, текст изначально был в ISO85 (что-то) - person levhita; 04.11.2008
comment
Я последовал вашему совету и добавил пару utf8_encodes (спасибо богам программирования за ООП), так что с самого начала все в utf8. Моя основная база данных была воссоздана в UTF8, и я просто добавил эту строку, чтобы соединить мою систему с некоторыми базами данных плагинов. - person levhita; 04.11.2008
comment
В этом случае вам придется использовать utf8_decode при возврате данных. Все это необходимо только в том случае, если вы используете внутри PHP кодировку по умолчанию (ISO-8859-1). Рассмотрите возможность использования UTF-8 во всей вашей системе, и в этом случае вам не нужно ничего кодировать (да, это сбивает с толку). - person troelskn; 04.11.2008