Что такое " E " перед строкой Postgres?
Я читал заявление Postgres / PostGIS следующим образом:
SELECT ST_AsBinary(
ST_GeomFromWKB(
E'0101000000321256B312O304Q30034730220275336%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. константа escape-строки указывается путем написания буквы
E
(верхний или нижний регистр) непосредственно перед открытием одинарной кавычки, например,E'foo'
. (При продолжении константы escape-строки через строки, пишиE
только перед первой открывающей кавычки.) В строку, символ обратной косой черты (\
) начинается c-подобная escape-последовательность обратной косой черты, в которой комбинация обратной косой черты и следующих символов представляет собой специальное значение байта
использование \
в вашей строке означает, что он избегает escape-последовательности, вероятно, для безопасности при транспортировке и хранении в . The дословно строка фактически передана в ST_GeomFromWKB
функции:
1100016B2O4Q070056%E@
эти последовательности из 3 или 4 символов между косыми чертами будут интерпретироваться ST_GeoFromWKB
напрямую.
документация ST_GeoFromWKB
( http://postgis.org/docs/ST_GeomFromWKB.html) государства:
на
ST_GeomFromWKB
функция, принимает известное бинарное представление геометрии и ID системы пространственной привязки (SRID
) и создает экземпляр соответствующего типа геометрии. Эта функция играет роль фабрики геометрии в SQL. Это альтернативное имя дляST_WKBToSQL
.
к сожалению, он не указывает, какой именно формат," известное двоичное представление " на самом деле.
оказывается, что содержимое строки зависит от используемой вами системы координат, которая задается . В этом случае 4326
соответствует WGS84
: https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84
вам нужно будет сделать дальнейшее чтение и исследование, чтобы распутать это.
что ты посмотреть не выглядит как шестнадцатеричный, потому что bytea
строковый литерал находится в синтаксис escape-строки (который в настоящее время довольно устарел).
E'\001\001\000\000\000\321\256B\312O\304Q\300\347\030\220\275\336%E@'
то же самое ,что и "стандартная соответствующая строка":
'1100016B2O4Q070056%E@'
обоих в "escape format", который может быть представлен более эффективно в "формат hex" as:
'\x0101000000d1ae42ca4fc451c0e71890bdde254540'
вы можете использовать encode()
и decode()
для преобразования одной формы в другую.
Я ответил на твой последующий вопрос по ГИС.SE с более подробной информацией.