pgsql二進位制字元

2021-06-22 08:39:01 字數 2224 閱讀 3851

postgresql 8.1 中文文件

prev

fast backward

chapter 8. 資料型別

fast forward

next

bytea 資料型別允許儲存二進位制字串。 參閱table 8-6。

table 8-6. 二進位制資料型別

名字儲存空間

描述bytea

4 位元組加上實際的二進位制字串

變長的二進位制字串

二進位制字串是乙個位元組數值的序列。 二進位制字串和字元字串的區別有兩個: 首先,二進位制字串完全可以允許儲存位元組零值以及其它"不可列印的"位元組 (定義為範圍在 32 到 126 之外的位元組)。 字串不允許位元組零,並且也不允許那些從資料庫選定的字符集編碼裡面認為是非法的其它位元組值或者位元組序列。 第二,對二進位制串的處理就是實際上的位元組,而字串的處理和取決於區域設定。 簡單說,二進位制字串適用於儲存那些程式設計師認為是"裸位元組"的資料, 而字串適合儲存文字。

在輸入 bytea 數值的時候, 在乙個 sql 語句的文字串裡面, 你必須逃逸某些位元組值(但可以逃逸所有位元組值) 通常,要逃逸乙個位元組值,需要把它的數值轉換成與其十進位制位元組值對應的三位八進位制數字, 並且前導兩個反斜槓。有些八進位制數值有可選的逃逸序列, 在 table 8-7 中顯示, 同時給出了可選的逃逸序列。

table 8-7. bytea 文字逃逸八進位制

十進位制數值

描述輸入逃逸表現形式

例子輸出形式

0零的八進位制

'\\000'

select '\\000'::bytea;

\000

39單引號

'\'' 或者 '\\047'

select '\''::bytea;'92

反斜槓'\\\\' 或者 '\\134'

select '\\\\'::bytea;

\\0 到 31 和 127 到 255

"不可列印"位元組

'\\***'

(八進位制值)

select '\\001'::bytea;

\001

逃逸"不可列印"位元組的要求因區域設定而異。在某些場合下,你可以不逃逸它們。 請注意table 8-7裡的每個例子都是剛好乙個位元組長,雖然位元組零和反斜槓輸出形式比乙個字元要長。

你必須寫這麼多反斜槓的原因,如 table 8-7 所示, 是因為乙個寫成字串文字的輸入字串必須通過 postgresql 伺服器裡的兩個分析階段。 每個反斜槓對的第乙個反斜槓會被字串文字分析其理解成乙個逃逸字元而消耗掉, 剩下反斜槓對中的第二個。剩下的反斜槓被 bytea 輸入函式當作乙個三位八進位制值或者是逃逸另外乙個反斜槓的開始。 比如,乙個傳遞給伺服器的字串文字 '\\001' 在通過字串分析器之後會成為 \001。而 \001 則傳送給 bytea 輸入函式,在這裡它被轉換成乙個十進位制值為 1 的單個位元組。請注意,省略字元不會被 bytea 特殊對待, 因此它遵循字串文字的普通規則。(又見 section 4.1.2.1。)

bytea 位元組也在輸出中逃逸的。通常, 每個"不可列印"的位元組值都轉化成對應的前導反斜槓的三位八進位制數值。 大多數"可列印的"位元組值是以客戶端字符集的標準表現形式出現的。 十進位制值為 92 (反斜槓)的位元組有乙個特殊的可選輸出形式。細節在 table 8-8 裡描述。

table 8-8. bytea 輸出逃逸序列

位元組的十進位制值

描述逃逸的輸出形式

例子輸出結果

92反斜槓

\\select '\\134'::bytea;

\\0 到 31 和 127 到 255

"不可列印"八進位制字元

\***

(octal value)

select '\\001'::bytea;

\001

32 到 126

"可列印"八進位制字元

客戶端字符集表現形式

select '\\176'::bytea;~

根據你使用的前端的不同,在逃不逃逸 bytea 字串的問題上你可能有一些額外的工作要做。 比如,如果你的介面自動轉換換行和回車,那你可能還要逃逸它們。

sql 標準定義了一種不同的二進位制字串型別, 叫做 blob 或者 binary large object。 其輸入格式和 bytea 不同,但是提供的函式和操作符大多一樣。

prev

home

next

字元型別

up日期/時間型別

pgsql9 6二進位制安裝

新增postgres使用者和使用者組 groupadd postgres useradd g postgres postgres echo postgres passwd stdin postgres tar zxvf postgresql 9.6.12 1 linux x64 binaries.t...

二進位制 二進位制起源

現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...

判斷二進位製半整數(二進位制)

10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...