<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 8.4\. 二進制數據類型 `bytea`數據類型允許存儲二進制字符串。參閱[Table 8-6](#calibre_link-2285)。 **Table 8-6\. 二進制數據類型** | 名字 | 存儲空間 | 描述 | | --- | --- | --- | | `bytea` | 1或4字節加上實際的二進制字符串 | 變長的二進制字符串 | 二進制字符串是一個字節序列。二進制字符串和普通字符字符串的區別有兩個: 首先,二進制字符串完全可以存儲字節零值以及其它"不可打印的" 字節(定義在 32 到 126 范圍之外的字節)。字符串不允許字節零值, 并且也不允許那些不符合選定的字符集編碼的非法字節值或者字節序列。 第二,對二進制字符串的處理實際上就是處理字節,而對字符串的處理則取決于區域設置。 簡單說,二進制字符串適用于存儲那些程序員認為是"原始字節"的數據, 而字符串適合存儲文本。 `bytea`類型支持兩種輸入輸出的外部格式:"hex" 格式和PostgreSQL的歷史"escape"格式。 這兩種格式通常在輸入中使用,輸出格式由[bytea_output](#calibre_link-1042) 配置參數決定,默認是hex。(需要注意的是hex格式是在PostgreSQL 9.0中引入的,早期版本和一些工具中不識別。) SQL標準定義了一個不同的二進制字符串格式,稱為`BLOB` 或`BINARY LARGE OBJECT`。輸入格式與`bytea`不同, 但提供的函數和操作符基本一致。 ## 8.4.1\. `bytea`十六進制格式 "hex"格式將二進制數據編碼為每字節2位十六進制數字, 最重要的四位(半字節)放在開始。整條字符串以`\x`開始 (與逃逸格式相區別)。在某些情況下,最初的反斜杠需要再寫一次,以逃逸, 同樣,在逃逸格式中,反斜杠需要寫兩個,下面會詳細介紹。 十六進制數字可以大寫也可以小寫,并且數字對之間允許有空格(但不能是在一個數對, 也不能是在`\x`起始序列)。 十六進制格式能夠與許多的外部應用程序和協議兼容,并且轉換往往比逃逸快, 因此更傾向于這種用法。 例子: ``` SELECT E'\\xDEADBEEF'; ``` ## 8.4.2\. `bytea`逃逸格式 對于`bytea`格式來說,"escape"格式是一種傳統的 PostgreSQL格式。它采用以ASCII字符序列來表示二進制串的方法, 同時將那些無法表示成ASCII字符的二進制串轉換成特殊的逃逸序列。從應用的角度看, 如果代表字節的字符有意義,那么這種表示方法會很方便。但實際上, 這樣做會模糊二進制字符串和字符字符串之間的區別,從而造成困擾, 同時篩選出的逃逸機制會顯得很臃腫。因此對一些新應用應該恰當的避免這種格式。 當以逃逸格式錄入`bytea`值時,你_必須_逃逸某些字節值, 同時_可以_逃逸所有字節值。通常,要逃逸一個字節值, 將它轉換成反斜杠+三位八進制值的形式(或兩個反斜杠,如果用逃逸字符串語法將值寫成文本形式)。 另外,反斜杠本身(字節值92)可以用雙反斜杠表示。[Table 8-7](#calibre_link-2286) 給出了必須逃逸的字符串,和替代的逃逸序列(如適用)。 **Table 8-7\. `bytea`文本逃逸八進制** | 十進制數值 | 描述 | 輸入逃逸形式 | 例子 | 輸出形式 | | --- | --- | --- | --- | --- | | 0 | 八進制的零 | `E'\\000'` | `SELECT E'\\000'::bytea;` | `\000` | | 39 | 單引號 | `''''` 或 `E'\\047'` | `SELECT E'\''::bytea;` | `'` | | 92 | 反斜杠 | `E'\\\\'` 或 `E'\\134'` | `SELECT E'\\\\'::bytea;` | `\\` | | 0 to 31 and 127 to 255 | "不可打印"八進制字符 | `E'\\``_xxx'_` (八進制值) | `SELECT E'\\001'::bytea;` | `\001` | 逃逸_不可打印_字節的要求因區域設置而異。在某些場合下, 你可以不逃逸它們。請注意[Table 8-7](#calibre_link-2286) 里的每個例子都是剛好一個字節長,雖然輸出形式比一個字符要長。 你必須寫這么多反斜杠的原因,如[Table 8-7](#calibre_link-2286)所示, 是因為一個寫成字符串文本的輸入字符串必須通過PostgreSQL 服務器里的兩個分析階段。每一對反斜杠中的第一個會被字符串文本分析器理解成一個逃逸字符而消耗掉, 于是剩下的第二個反斜杠被`bytea`輸入函數當作一個三位八進制值或者是逃逸另外一個反斜杠的開始。 比如,一個傳遞給服務器的字符串文本`E'\\001'`在通過字符串分析器之后會當作`\001` 發送給`bytea`輸入函數,在這里它被轉換成一個十進制值為 1 的單個字節。請注意, 單引號字符(')不會被`bytea`特殊對待,它遵循字符串文本的普通規則。又見[Section 4.1.2.1](#calibre_link-969)。 `Bytea`字節也在輸出中逃逸。通常,每個"不可打印" 的字節值都轉化成對應的前導反斜杠的三位八進制數值。大多數"可打印的" 字節值是以客戶端字符集的標準表現形式出現的。十進制值為 92(反斜杠)的字節在輸出中雙寫。 細節在[Table 8-8](#calibre_link-2287)里描述。 **Table 8-8\. `bytea`輸出逃逸序列** | 字節的十進制值 | 描述 | 逃逸的輸出形式 | 例子 | 輸出結果 | | --- | --- | --- | --- | --- | | 92 | 反斜杠 | `\\` | `SELECT E'\\134'::bytea;` | `\\` | | 0 to 31 and 127 to 255 | "不可打印"八進制字符 | `\``_xxx_` (八進制值) | `SELECT E'\\001'::bytea;` | `\001` | | 32 to 126 | "可打印"八進制字符 | 客戶端字符集表現形式 | `SELECT E'\\176'::bytea;` | `~` | 根據你使用的前端不同,在是否逃逸`bytea`字符串的問題上你可能有一些額外的工作要做。 比如,如果你的接口自動轉換換行和回車,那你可能還要逃逸它們。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看