提问人:thor 提问时间:1/16/2016 最后编辑:Erwin Brandstetterthor 更新时间:11/18/2021 访问量:28151
Postgres 字符串前面的“E”是什么?
What's the "E" before a Postgres string?
问:
我正在阅读这样的 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;后地理信息系统 2.1.
答:
根据 PostgreSQL 文档 https://www.postgresql.org/docs/9.0/sql-syntax-lexical.html(强调我的)
PostgreSQL 还接受“转义”字符串常量,它们是 SQL 标准的扩展。转义字符串常量是通过在左单引号前写字母
E
(大写或小写)来指定的,例如 .(当跨行继续转义字符串常量时,请仅在第一个开始引号之前写入。在转义字符串中,反斜杠字符 () 开始类似 C 的反斜杠转义序列,其中反斜杠和后面字符的组合表示一个特殊的字节值E'foo'
E
\
在字符串中使用 意味着它正在转义转义序列,可能是为了在传输和存储文件中是安全的。实际传递到函数中的逐字字符串将是:\\
.sql
ST_GeomFromWKB
\001\001\000\000\000\321\256B\312O\304Q\300\347\030\220\275\336%E@
然后,这些斜杠之间 3 或 4 个字符的序列将直接解释。ST_GeoFromWKB
( https://postgis.net/docs/ST_GeomFromWKB.html ) 的文档指出:ST_GeoFromWKB
该函数采用几何图形的已知二进制表示形式和空间参考系统 ID (),并创建相应几何类型的实例。此函数在 SQL 中扮演几何工厂的角色。这是 的替代名称。
ST_GeomFromWKB
SRID
ST_WKBToSQL
不幸的是,它没有说明“众所周知的二进制表示”到底是什么格式。
事实证明,字符串的内容取决于您使用的坐标系,该坐标系由参数指定。在这种情况下,对应于:https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84SRID
4326
WGS84
你需要做进一步的阅读和研究来解开这个问题。
评论
4326
304Q
336%E@
你所看到的看起来不像是十六进制的,因为 bytea
字符串文字是转义字符串语法(现在已经过时了)。
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@'
两者都采用“转义格式”,可以更有效地用“十六进制格式”表示为:
'\x0101000000d1ae42ca4fc451c0e71890bdde254540'
您可以使用 encode(
) 和 decode()
将一种形式转换为另一种形式。
我回答了您在 gis.SE 上的后续问题,并提供了更多细节。
评论