2016-01-16 39 views
6

我在讀一個Postgres/PostGIS的說法是這樣的:Postgres字符串之前的「E」是什麼?

SELECT ST_AsBinary(
ST_GeomFromWKB(
    E'\\001\\001\\000\\000\\000\\321\\256B\\312O\\304Q\\300\\347\\030\\220\\275\\336%[email protected]', 
    4326 
) 
); 

以上從一個衆所周知的二進制(WKB)創建的東西。我還沒有看到在這裏引用字符串的單引號的開頭引號前面的E的具體方式。

這種格式稱爲什麼?這是什麼格式的規則?例如336%[email protected]在最後的特殊或只是一些二進制值?

這是與Postgres9.3/9.4; PostGIS 2.1。

回答

7

作爲每PostgreSQL文檔http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html(重點煤礦)

的PostgreSQL還接受「逃離」字符串常量,這是一個擴展SQL標準。 通過在開頭的單引號之前寫入字母E(大寫或小寫)來指定轉義字符串常量,例如E'foo'。 (當在行之間繼續使用轉義字符串常量時,請僅在第一次打開引號之前寫入E)。在轉義字符串中,反斜槓字符()開始一個類似C的反斜槓轉義序列,其中反斜槓和後面的字符組合)代表了一種特殊的字節值

在字符串中使用的\\意味着它逃離轉義序列,大概是在一個.sql文件傳輸和存儲安全。實際上傳遞到ST_GeomFromWKB功能逐字字符串將是:

\001\001\000\000\000\321\256B\312O\304Q\300\347\030\220\275\336%[email protected] 

斜線之間的這些3個或4個字符的序列然後由ST_GeoFromWKB直接進行解釋。

ST_GeoFromWKBhttp://postgis.org/docs/ST_GeomFromWKB.html)文檔狀態:

ST_GeomFromWKB功能,採用的幾何形狀和空間參照系ID(SRID)的公知的二進制表示,並創建適當的幾何形狀的實例類型。這個函數在SQL中扮演着幾何工廠的角色。這是ST_WKBToSQL的替代名稱。

不幸的是,它沒有說明什麼格式,確切地說,「衆所周知的二進制表示」實際上是。

事實證明,字符串的內容取決於您使用的座標系,該座標系由參數SRID指定。在這種情況下,4326對應於WGS84https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84

您需要進一步閱讀和研究以解決此問題。

+0

非常感謝。我瞭解'4326' SRID部分。但不是'304Q'和'336%E @'。它們看起來不像維基百科所說的十六進制:https://en.wikipedia.org/wiki/Well-known_text#Well-known_binary。我剛纔在GIS.SE上問了另一個問題:http://gis.stackexchange.com/questions/177075/how-to-interpret-a-wkb-well-known-binary。 – tinlyx

2

什麼你看到看起來並不像十六進制,因爲bytea字符串字面escape string syntax(這是相當過時的今天)。

E'\\001\\001\\000\\000\\000\\321\\256B\\312O\\304Q\\300\\347\\030\\220\\275\\336%[email protected]' 

同爲 「符合標準的字符串」:

'\001\001\000\000\000\321\256B\312O\304Q\300\347\030\220\275\336%[email protected]' 

兩者都是"escape format",其可以在"hex format"更有效地被表示爲:

'\x0101000000d1ae42ca4fc451c0e71890bdde254540' 

可以使用encode() and decode()到將一種形式轉化爲另一種形式。

我回答了您的follow-up question on gis.SE瞭解更多詳情。

相關問題