Что такое " 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 с более подробной информацией.