FirebirdSQL logo
 Типы данныхОператоры определения данных (DDL) 
Набор символов для строковых литералов

При необходимости строковому литералу может предшествовать имя набор символов, который начинается с префикса подчеркивания “_”.Это известно как вводный синтаксис (Introducer syntax). Его цель заключается в информировании Firebird о том, как интерпретировать и хранить входящую строку.

Example 1. Вводный синтаксис для строковых литералов
-- обратите внимание на префикс '_'
INSERT INTO People
VALUES (_ISO8859_1 'Hans-Jörg Schäfer');
Строковые литералы для двоичных строк

Начиная с Firebird 2.5 строковые константы могут быть записаны в шестнадцатеричной нотации, так называемые “двоичные строки”.Каждая пара шестнадцатеричных цифр определяет один байт в строке.Строки введённые таким образом будут иметь кодировку OCTETS по умолчанию,но вводный синтаксис (introducer syntax) может быть использован для принудительной интерпретации строки в другом наборе символов.

Синтаксис:
<binary string literal> ::=
  {x | X} <quote> [<space>...] [ { <hexit> [<space>...] <hexit> [<space>...] }... ] <quote>
          [ { <separator> <quote> [ <space>... ] [ { <hexit> [ <space>... ]
            <hexit> [ <space>... ] }... ] <quote> }... ]

<hexit> ::= an even number of <hexdigit>

<hexdigit> ::= 0..9 | A..F | a..f
Example 1. Примеры:
SELECT x'4E657276656E' FROM rdb$database
-- returns 4E657276656E, a 6-byte 'binary' string

SELECT _ascii x'4E657276656E' FROM rdb$database
-- returns 'Nerven' (same string, now interpreted as ASCII text)

SELECT _iso8859_1 x'53E46765' FROM rdb$database
-- returns 'Säge' (4 chars, 4 bytes)

SELECT _utf8 x'53C3A46765' FROM rdb$database
-- returns 'Säge' (4 chars, 5 bytes)
Note

Как будут отображена двоичная строка зависит от интерфейса клиента.Например, утилита isql использует заглавные буквы A-F, в то время как FlameRobin буквы в нижнем регистре.Другие могут использовать другие правила конвертирования, например отображать пробелы между парами байт: '4E 65 72 76 65 6E'.

Шестнадцатеричная нотация позволяет вставить любой байт (включая 00) в любой позиции в строке.

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

Example 2. Двоичный литерал прерванный пробелом
-- Group per byte (whitespace inside literal)
select _win1252 x'42 49 4e 41 52 59'
from RDB$DATABASE;
-- output: BINARY

-- whitespace between literal
select _win1252 x'42494e'
                 '415259'
from RDB$DATABASE;
-- output: BINARY