Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БД / БД / Базы данных Учебник Окончательный вариант!!!.doc
Скачиваний:
209
Добавлен:
22.05.2015
Размер:
1.77 Mб
Скачать

4.3.1.7.Двоичные типы данных

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

Двоичные типы данных

Имя

Размер хранения

Описание

bytea

1 или 4 байта плюс сама двоичная строка

двоичная строка переменной длины

Двоичная строка — это последовательность байт (или октетов). Есть два отличия двоичных строки от символьных: Во-первых, двоичные строки специально позволяют хранить байтовое представление таких символов как ноль и других "непечатаемых" символов (обычно, это символы представленные кодами в диапазоне до 32 и от 126). Символьные строки не позволяют содержать в себе символ ноль, а также любые другие значения и последовательности байт, которые не допускаются той кодировкой, с которой работает СУБД. Во-вторых, операции с двоичными строками осуществляются с байтами, в то время как операции с символьными строками зависят от установок используемой локали. В общем, двоичные строки подходят для хранения данных, которые программист считает "просто байтами", в то время как символьные строки походят для хранения текста.

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

bytea Экранируемые литеральные значения

Десятичное значение

Описание

Как нужно экранировать

Пример

Представление на выходе

0

ноль

E'\\000'

SELECT E'\\000'::bytea;

\000

39

одиночная кавычка

'''' or E'\\047'

SELECT E'\''::bytea;

'

92

обратная косая черта

E'\\\\' or E'\\134'

SELECT E'\\\\'::bytea;

\\

от 0 до 31 и от 127 до 255

"непечатаемый" символ

E'\\xxx' (octal value)

SELECT E'\\001'::bytea;

\001

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

Причина, по которой требуется так много символов обратная косая черта в таблице заключается в том, что вводимый строковый литерал должен пройти на сервере PostgreSQL через две фазы обработки. Первая обратная косая черта каждой пары интерпретируется для обработчика строкового литерала (включая использование синтаксиса экранирования) как символ экранирования и, таким образом, опускается, оставляя второй символ обратная косая черта в паре. (Для того, чтобы избежать этого уровня экранирования можно использовать строки доллар-кавычка.) Оставшийся символ обратная косая черта затем распознаётся функцией ввода типа bytea, как начинающий трёхциферное восьмеричное значение или символ экранирования следующего символа обратная косая черта. Например, строковый литерал, передаваемый на сервер как 'E\\001' принимает вид \001 после обработчика строкового литерала. Далее \001 посылается функции ввода типа bytea, где преобразовывается в одиночный байт с десятичным значением 1. Заметим, что символ одиночной кавычки для bytea не считается специальным, так как он отвечает обычным правилам строковых литералов.

Значения Bytea при выводе иногда экранируются. Обычно, в виде эквивалентного трёхциферного восьмеричного значения, предваряемого символом обратная косая черта. Большинство "печатаемых" байт выводится в их стандартном представлении, согласно кодировке клиента. Символ с десятичным значением 92 (обратная косая черта) выводится дважды. Подробности смотрите в таблице

bytea Экранированные значения на выводе

Десятичное значение

Описание

Экранированное представление при выводе

Пример

Результат вывода

92

обратная косая черта

\\

SELECT E'\\134'::bytea;

\\

от 0 до 31 и от 127 до 255

"непечатаемые" значения

\xxx (восьмеричное значение)

SELECT E'\\001'::bytea;

\001

от 32 до 126

"печатаемые" значения

представление по кодировке клиента

SELECT E'\\176'::bytea;

~

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

Стандарт SQL определяет другой тип двоичной строки, называемый BLOB или BINARY LARGE OBJECT. Формат ввода для этого типа отличается от bytea, но предоставляемые функции и операторы в большинстве своём такие же.

Соседние файлы в папке БД