日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

二進制數(shù)據(jù)類型

本文介紹了二進制數(shù)據(jù)類型的定義及相關(guān)語法。

名稱

存儲大小

說明

BINARY

二進制字符串的長度。

定長二進制字符串,取值范圍:1~8300。

BLOB

實際二進制字符串加1字節(jié)(如果二進制字符串小于127字節(jié))或4字節(jié)(如果二進制字符串大于等于127字節(jié))。

可變長度的二進制字符串。

VARBINARY

二進制字符串的長度。

可變長度的二進制字符串,取值范圍:1~8300。

BYTEA

1或4字節(jié)加上實際的二進制字符串。

變長的二進制字符串。

二進制串是一個八位位組(或字節(jié))的序列。 二進制串和字符串的區(qū)別有兩個: 首先,二進制串明確允許存儲零值的字節(jié)以及其它“不可打印的”字節(jié)(通常是位于十進制范圍 32 到 126 之外的字節(jié))。 字符串不允許零字節(jié),并且也不允許那些對于數(shù)據(jù)庫的選定字符集編碼是非法的任何其它字節(jié)值或者字節(jié)值序列。 第二,對二進制串的操作會處理實際上的字節(jié),而字符串的處理和取決于區(qū)域設(shè)置。 簡單說,二進制字串適用于存儲那些程序員認為是“裸字節(jié)”的數(shù)據(jù),而字符串適合存儲文本。

bytea類型支持兩種用于輸入和輸出的格式:“十六進制”格式和“轉(zhuǎn)義”格式。在輸入時這兩種格式總是會被接受。輸出格式則取決于配置參數(shù) bytea_output,其默認值為十六進制。

SQL 標準定義了一種不同的二進制串類型, 叫做BLOB或者BINARY LARGE OBJECT。其輸入格式和bytea不同,但是提供的函數(shù)和操作符大多一樣。

bytea的十六進制格式

“十六進制”格式將二進制數(shù)據(jù)編碼為每個字節(jié) 2 個十六進制位,最高有效位在前。整個串以序列\x開頭(用以和轉(zhuǎn)義格式區(qū)分)。在某些情景中,開頭的反斜線可能需要通過雙寫來轉(zhuǎn)義。 作為輸入,十六進制位可以是大寫也可以是小寫,在位對之間可以有空白(但是在位對內(nèi)部以及開頭的\x序列中不能有空白)。十六進制格式和很多外部應(yīng)用及協(xié)議相兼容,并且其轉(zhuǎn)換速度要比轉(zhuǎn)義格式更快,因此人們更愿意用它。

例子:

    select '\xDEADBEEF';

bytea的轉(zhuǎn)義格式

“轉(zhuǎn)義”格式是bytea類型的傳統(tǒng)格式。它采用將二進制串表示成 ASCII 字符序列的方法,而將那些無法用 ASCII 字符表示的字節(jié)轉(zhuǎn)換成特殊的轉(zhuǎn)義語句。從應(yīng)用的角度來看,如果將字節(jié)表示為字符有意義,那么這種表示將很方便。但是在實際中,這常常是令人困擾的,因為它使二進制串和字符串之間的區(qū)別變得模糊,并且這種特別的轉(zhuǎn)義機制也有點難于處理。因此這種格式可能會在大部分新應(yīng)用中避免使用。

在轉(zhuǎn)義模式下輸入bytea值時,某些值的字節(jié)必須被轉(zhuǎn)義,而所有的字節(jié)值都可以被轉(zhuǎn)義。通常,要轉(zhuǎn)義一個字節(jié),需要把它轉(zhuǎn)換成與它的三位八進制值, 并且前導(dǎo)一個反斜線。反斜線本身(十進制字節(jié)值 92)也可以用雙寫的反斜線表示。

bytea文字轉(zhuǎn)義字節(jié)

十進制字節(jié)值

描述

轉(zhuǎn)義輸入表示

例子

十六進制表示

0

0字節(jié)

'\000'

'\000'::bytea

\x00

39

單引號

'''''\047'

''''::bytea

\x27

92

反斜線

'\\''\134'

'\\'::bytea

\x5c

0到31和127到255

“不可打印的”字節(jié)

'\xxx'(八進制值)

'\001'::bytea

\x01

轉(zhuǎn)義“不可打印的”字節(jié)的要求取決于區(qū)域設(shè)置。在某些實例中,你可以不理睬它們,讓它們保持未轉(zhuǎn)義的狀態(tài)。

單引號必須寫兩次對任何 SQL 命令中的字符串常量都是一樣的。 文字解析器消耗最外層的單引號,并縮減成對的單引號為一個普通數(shù)據(jù)字符。 bytea輸入函數(shù)看到的只是一個單引號,它將其視為普通數(shù)據(jù)字符。 但是,bytea輸入函數(shù)將反斜杠視為特殊字符。

在某些情況下,反斜杠必須加倍,如上所示,因為通用的字符串文字解析器也會將一對反斜杠減少為一個數(shù)據(jù)字符。

Bytea字節(jié)默認被輸出為hex格式。如果你把 bytea_output 改為escape,“不可打印的”字節(jié)會被轉(zhuǎn)換成與之等效的三位八進制值并且前置一個反斜線。大部分“可打印的”字節(jié)被輸出為它們在客戶端字符集中的標準表示形式,例如:

    set bytea_output = 'escape';

    select 'abc \153\154\155 \052\251\124'::bytea;
         bytea
    ----------------
     abc klm *\251T

十進制值為 92(反斜線)的字節(jié)在輸出時被雙寫。

bytea輸出轉(zhuǎn)義字節(jié)

十進制字節(jié)值

描述

轉(zhuǎn)義的輸出表示

例子

輸出結(jié)果

92

反斜線

\\

'\134'::bytea

\\

0到31和127到255

“不可打印的”字節(jié)

\xxx(八進制值)

'\001'::bytea

\001

32到126

“可打印的”字節(jié)

客戶端字符集表示

'\176'::bytea

~

根據(jù)你使用的前端,你在轉(zhuǎn)義和未轉(zhuǎn)義bytea串方面可能需要做額外的工作。例如,如果你的接口自動翻譯換行和回車,你可能也不得不轉(zhuǎn)義它們。

BINARY和VARBINARY

數(shù)據(jù)BINARY類型為固定長度的二進制值,長度為N字節(jié),N的取值范圍為:1~8300字節(jié)。

數(shù)據(jù)BINARY類型需要N字節(jié)存儲。數(shù)據(jù)用尾隨零填充到最大列大小。

數(shù)據(jù)VARBINARY類型是具有最大字節(jié)長度的變長二進制值N,N的取值范圍為:1~4194304字節(jié)。

示例

create table bvar (col1 BINARY (10), col2 VARBINARY (10));
create table t (col1 BINARY(10), COL2 VARBINARY(10));
insert into t values('0x4D795','0x39274D');
select * from t;
    col1    |   col2   
------------+----------
 0x4D795    | 0x39274D
(1 row)

BLOB

BLOB數(shù)據(jù)類型存儲非結(jié)構(gòu)化二進制大對象。BLOB數(shù)據(jù)的最大大小為16 MB。

在列中定義BLOB時,不需要定義VARBINARY或者其它可變長度數(shù)據(jù)類型那樣定義最大字符數(shù)。相反,該列的定義如下:

create table blob_content ( 
  id NUMBER PRIMARY KEY, 
  blob_column BLOB );

為了操作BLOB,提供了以下函數(shù):

  • 有兩種初始化BLOB類型數(shù)據(jù)的方法,一種是使用EMPTY_BLOB函數(shù)來初始化空的BLOB類型數(shù)據(jù),另一種是直接插入數(shù)據(jù)到表中

  • 如需將二進制值轉(zhuǎn)換為BLOB類型,請使用TO_LOBTO_BLOB函數(shù)。