В моем приложении я вставляю данные в базу данных, используя код на C, так как строки, которые я получаю из ненадежного источника, я избежал их, используя PQescapeByteaConn
библиотеку libpq. Который работает отлично, то есть приводит к формату строки Octet. Смотрите ниже пример,
Строка ввода : \n\t\f\b\p\k\j\l\mestPrepared
Выходная строка: \\012\\011\\014\\010pkjlmestPrepared
Выходная строка вставляется в базу данных. Теперь я получаю эти данные из базы данных в виде кода Java, используя JDBC. Как я могу удалить строку обратно к ее первоначальному значению?
Я думал о двух возможных подходах,
- Измените запрос поиска в базе данных и передайте это поле любой функции обработки строк Postgres, т. Е. Которая может преобразовывать байты в текст.
- Делайте декодирование в коде Java.
Я могу понять, что подход 1 будет более эффективным. Я перепробовал почти все функции, перечисленные здесь, но ничего не работает. Пожалуйста помоги!!
Я использую версию 8.4 postgres на машине с Linux.
ResultSet.getBytes()
?Ответы:
Вы пробовали
encode(data bytea, format text)
сescape
форматом. В этом синтаксисеformat
может быть любой из них,Так
encode(E'123\\000456'::bytea, 'hex')
будет выводить байту в шестнадцатеричном виде.источник
Преобразование BYTEA в TEXT требует, чтобы вы знали внутреннюю кодировку текста. Не зная кодировки, вы ничего не можете сделать. В обычном
text
столбце база данных хранит текст, какSERVER_ENCODING
указано. Например, в вашем примере\n
переводится на\012
. Ну, это свойство кодирования. Это не объективно верно для вселенной.Если вы знаете эту кодировку, все просто ...
encode
это. Это создает экранированную строку (типtext
).bytea
.bytea
не позволяет нам вернуться кtext
. Мы должны сказать ему, какой текстовый форматbytea
используетсяconvert_from
. Мы говорим это UTF-8.Вот пример.
источник
Для последователей, так как это кажется каноническим вопросом для «преобразования байты в текст» (то есть, чтобы вы могли увидеть это в pgAdmin и т. Д.). Вот как это сделать:
select encode(table.your_column_name, 'escape') as name from table_name
источник