×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

2.5.4. Типы двоичных данных

2.5.4.1. bytea Формат Hex
2.5.4.2. bytea Формат Escape

Тип данных bytea позволяет хранить двоичные строки; см. Таблица 2.5.6.

Таблица 2.5.6. Типы двоичных данных

ИмяРазмерОписание
bytea1 или 4 байта плюс фактическая двоичная строкадвоичная строка переменной длины

Двоичная строка представляет собой последовательность октетов (байтов). Двоичные строки отличаются от символьных строк двумя особенностями. Во-первых, двоичные строки специально допускают хранение октетов с нулевым значением и других «непечатных» октеты (как правило, октеты за пределами десятичного диапазона от 32 до 126). Символьные строки не допускают нулевых октетов, а также любых других значений или последовательностей значений октетов, недопустимых согласно выбранной кодировке символов базы данных. Во-вторых, при операциях над двоичными строками обрабатываются фактические байты, тогда как обработка символьных строк зависит от настроек локали. Проще говоря, двоичные строки подходят для хранения данных, которые программист рассматривает как «необработанные байты», тогда как символьные строки предназначены для хранения текста.

Тип bytea тип поддерживает два формата ввода и вывода: «hex» формат и Digital Q.DataBaseисторический «escape» формат. Оба этих формата всегда принимаются на входе. Формат вывода зависит от параметра конфигурации bytea_output; по умолчанию используется hex. (Обратите внимание, что формат hex был введен в Digital Q.DataBase 9.0; более ранних версиях, и некоторые инструменты его не поддерживают.)

Тип SQL стандарт определяет другой тип двоичных строк, называемый BLOB или BINARY LARGE OBJECT. Формат ввода отличается от bytea, но предоставляемые функции и операторы в основном идентичны.

2.5.4.1. bytea Формат Hex #

Тип «hex» кодирует двоичные данные в виде 2 шестнадцатеричных цифр на байт, начиная со старшего полубайта. Всей строке предшествует последовательность \x (чтобы отличить её от формата escape). В некоторых контекстах начальную обратную косую черту может понадобиться экранировать путём её удвоения (см. Раздел 2.1.1.2.1). При вводе шестнадцатеричные цифры могут быть как в верхнем, так и в нижнем регистре; между парами цифр допускаются пробелы (но не внутри пары цифр и не в начальной \x последовательности). Формат hex совместим с широким спектром внешних приложений и протоколов, и он обычно преобразуется быстрее, чем формат escape, поэтому его использование предпочтительно.

Пример:

SET bytea_output = 'hex';

SELECT '\xDEADBEEF'::bytea;
   bytea
------------
 \xdeadbeef

2.5.4.2. bytea Формат Escape #

Тип «escape» является традиционным Digital Q.DataBase форматом для bytea. В данном подходе используется представление двоичной строки в виде последовательности ASCII-символов, при этом байты, которые не могут быть представлены как ASCII-символы, преобразуются в специальные escape-последовательности. Если с точки зрения приложения интерпретация байтов как символов оправдана, то такая форма представления может быть удобной. Однако на практике это обычно вносит путаницу, так как размывает различие между двоичными и символьными строками; кроме того, выбранный механизм экранирования довольно громоздкий. Следовательно, использования данного формата, вероятно, следует избегать в большинстве новых приложений.

При вводе bytea значения в формате escape, октеты определенных значений должны подлежать экранированию, тогда как все значения октетов могут быть экранированы. В общем случае для экранирования октета его необходимо преобразовать в трехзначное восьмеричное значение и предварить символом обратной косой черты. Сама обратная косая черта (октет с десятичным значением 92) также может быть представлена двумя символами обратной косой черты. Таблица 2.5.7 содержит символы, которые должны быть экранированы, и приводит альтернативные управляющие последовательности, где это применимо.

Таблица 2.5.7. bytea Литералы экранированных октетов

Десятичное значение октетаОписаниеПредставление экранированных входных данныхПримерШестнадцатеричное представление
0нулевой октет'\000''\000'::bytea\x00
39одинарная кавычка'''' или '\047'''''::bytea\x27
92обратная косая черта'\\' или '\134''\\'::bytea\x5c
от 0 до 31 и от 127 до 255«непечатных» октеты'\xxx' (восьмеричное значение)'\001'::bytea\x01

Требование к экранированию непечатных октетов варьируется в зависимости от настроек локали. В некоторых случаях можно обойтись без их экранирования.

Причина, по которой одинарные кавычки должны удваиваться, как показано в Таблица 2.5.7, заключается в том, что это правило применимо к любому строковому литералу в SQL-команде. Универсальный парсер строковых литералов поглощает внешние одинарные кавычки и преобразует любую пару одинарных кавычек в один символ данных. То, что bytea входная функция воспринимает только одну одинарную кавычку, которую она обрабатывает как обычный символьный тип данных. Однако, bytea функция ввода обрабатывает обратные косые черты как спецсимволы, а другие действия, описанные в Таблица 2.5.7 реализуются данной функцией.

В некоторых контекстах количество обратных косых черт должно быть удвоено по сравнению с указанным выше, так как универсальный парсер строковых литералов также заменяет пары обратных косых черт одним символом данных; см. Раздел 2.1.1.2.1.

Bytea октеты выводятся в hex формате по умолчанию. При изменении значения bytea_output на escape, «непечатных» октеты преобразуются в эквивалентное им трехзначное восьмеричное значение, которому предшествует одна обратная косая черта. Большинство «печатных» октетов отображаются в их стандартном представлении в кодировке клиента, например:

SET bytea_output = 'escape';

SELECT 'abc \153\154\155 \052\251\124'::bytea;
     bytea
----------------
 abc klm *\251T

Октет с десятичным значением 92 (обратная косая черта) при выводе дублируется. Подробная информация приведена в Таблица 2.5.8.

Таблица 2.5.8. bytea Вывод экранированных октетов

Десятичное значение октетаОписаниеПредставление экранированного выводаПримерРезультат вывода
92обратная косая черта\\'\134'::bytea\\
от 0 до 31 и от 127 до 255«непечатных» октеты\xxx (восьмеричное значение)'\001'::bytea\001
от 32 до 126«печатных» октетыпредставление в кодировке клиента'\176'::bytea~

В зависимости от используемого клиентского приложения, Digital Q.DataBase вы используете, может потребоваться дополнительная обработка в части экранирования и обратного преобразования bytea строк. Например, может также потребоваться экранировать символы перевода строки и возврата каретки, если интерфейс преобразует их автоматически.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению