Строковые литералы для двоичных строк
Начиная с 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
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
|
Как будут отображена двоичная строка зависит от интерфейса клиента.Например, утилита Шестнадцатеричная нотация позволяет вставить любой байт (включая |
Литерал может содержать пробелы для разделения шестнадцатеричных символов.При необходимости строковый литерал может быть "прерван" пробелом или комментарием.Это может быть использовано для того, чтобы сделать шестнадцатеричную строку более читаемой путем группировки символов,или для разбиения длинного литерала на несколько строк, или для предоставления встроенных комментариев.
-- 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