Что такое "E" перед строкой Postgres?
Я читал заявление Postgres/PostGIS так:
SELECT ST_AsBinary(
ST_GeomFromWKB(
E'\\001\\001\\000\\000\\000\\321\\256B\\312O\\304Q\\300\\347\\030\\220\\275\\336%E@',
4326
)
);
Вышесказанное создает что-то из хорошо известного двоичного файла (WKB). Я не видел конкретного способа цитирования здесь, где строка одинарная, заключенная в кавычки E
перед началом цитаты.
Как называется этот формат? И каковы правила форматирования для этого? например, является 336%E@
в самом конце особенное или просто какое-то двоичное значение?
Это с Postgres9.3/9.4; PostGIS 2.1.
2 ответа
Согласно документации PostgreSQL http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html (выделено мной)
PostgreSQL также принимает строковые константы escape, которые являются расширением стандарта SQL. Экранирующая константа задается путем написания
E
(верхний или нижний регистр) непосредственно перед открывающей одинарной кавычкой, например,E'foo'
, (Продолжая экранирующую строковую константу через строки, напишитеE
только перед первой открывающей кавычкой.) В escape-строке символ обратной косой черты (\
) начинает C-подобную escape-последовательность обратной косой черты, в которой комбинация обратной косой черты и следующих символов представляет специальное значение байта
Использование \\
в вашей строке означает, что он избегает escape-последовательности, вероятно, для обеспечения безопасности при передаче и хранении в .sql
файл. Стенографическая строка фактически перешла в ST_GeomFromWKB
функция будет:
\001\001\000\000\000\321\256B\312O\304Q\300\347\030\220\275\336%E@
Эти последовательности из 3 или 4 символов между слешами будут интерпретированы ST_GeoFromWKB
непосредственно.
Документация для ST_GeoFromWKB
( http://postgis.org/docs/ST_GeomFromWKB.html) заявляет:
ST_GeomFromWKB
функция, принимает хорошо известное двоичное представление геометрии и идентификатор системы пространственной привязки (SRID
) и создает экземпляр соответствующего типа геометрии. Эта функция играет роль фабрики геометрии в SQL. Это альтернативное названиеST_WKBToSQL
,
К сожалению, в нем не указано, какой именно формат представляет собой "хорошо известное двоичное представление".
Оказывается, что содержимое строки зависит от используемой вами системы координат, которая определяется SRID
параметр. В этом случае 4326
соответствует WGS84
: https://en.wikipedia.org/wiki/World_Geodetic_System
Вам нужно будет продолжить чтение и исследование, чтобы распутать это.
То, что вы видите, не выглядит шестнадцатеричным, потому что bytea
строковый литерал в синтаксисе escape-строки (который в настоящее время довольно устарел).
E'\\001\\001\\000\\000\\000\\321\\256B\\312O\\304Q\\300\\347\\030\\220\\275\\336%E@'
То же, что и "стандартная соответствующая строка":
'\001\001\000\000\000\321\256B\312O\304Q\300\347\030\220\275\336%E@'
Оба находятся в "escape-формате", который может быть более эффективно представлен в "hex-формате" как:
'\x0101000000d1ae42ca4fc451c0e71890bdde254540'
Ты можешь использовать encode()
а также decode()
превратить одну форму в другую.
Я ответил на ваш дополнительный вопрос на gis.SE более подробно.