2013-09-17 2 views
0

Я использую PostgreSQL 9.0 и пытаюсь сохранить файл bytea, который содержит определенные специальные символы (символы регионального языка - кодировка UTF8). Но я не могу хранить данные как входные данные пользователя.PostgreSQL: не удалось сохранить специальный символ (региональный язык) в blob

Например:

, что я получаю в запросе при отладке: <sp_first_name_gu name="sp_first_name_gu" value="ઍયેઍ"></sp_first_name_gu><sp_first_name name="sp_first_name" value="aaa"></sp_first_name>

Это то, что хранится в БД: <sp_first_name_gu name="sp_first_name_gu" value="\340\252\215\340\252\257\340\253\207\340\252\215"></sp_first_name_gu><sp_first_name name="sp_first_name" value="aaa"></sp_first_name>

Обратите внимание на разницу в стоимости тега. С этой проблемой я не могу получить правильный ввод текста пользователем. Пожалуйста, предложите, что мне нужно сделать?

PS: Моя БД кодирована в кодировке UTF8.

ответ

1

Значение сохраняется правильно, но при извлечении оно сбрасывается в восьмеричные escape-последовательности.

Чтобы исправить это - измените настройки драйвера БД или выберите другую кодировку/экранирование для байта.

Или просто используйте правильные типы полей для данных XML - например, varchar или XML.

+1

@kuber Как вы решили проблему? – aProgrammer

0

Ваша строка \340\252\215\340\252\257\340\253\207\340\252\215 - это точно ઍયેઍ в восьмеричном кодировании, поэтому postgres сохраняет ваши данные правильно. PostgreSQL избегает всех непечатаемых символов, более подробно см. Postgresql documentation, особенно в разделе 8.4.2.

Смежные вопросы