最近更新: 2008-03-27

BIT and CHAR

BIT 與 CHAR 使用筆記。以 SQL92 為基準。

BIT很少用,前一陣子為了使用這種資料型態,google了不少資料,不過大部份網路資料都沒有提供什麼有用的資訊 (市面上的 SQL 書籍更是不提)。最後還是在各家資料庫系統本身的 Manual 中找到資訊。留下筆記,以供日後查閱。

BIT and BIT VARYING

bit string literal
<bit string literal> ::=
    B <quote> [ <bit>... ] <quote>
        [ { <separator>... <quote> [ <bit>... ] <quote> }... ]

<hex string literal> ::=
    X <quote> [ <hexit>... ] <quote>
        [ { <separator>... <quote> [ <hexit>... ] <quote> }... ]

數值 5 的 BIT 字串寫作 B'101' X'5'。要插入一筆含有 BIT 字串欄位的紀錄時,如下例所示:

CREATE TABLE "myTable" (
    "intValue" int,
    "bitString" BIT(4),
    "normalString" CHAR(1)
);

INSERT INTO "myTable" (
    "intValue",
    "bitString", 
    "normalString"
) 
VALUES ( 
    5,
    X'5', 
    '5' 
);
Cast

The 'Character' value expression can cast to BIT/BIT VARYING.

The 'Exact Numeric' and 'Approximate Numeric' value expression CANNOT cast to BIT/BIT VARYING.

SQL92 6.10 cast specification
-- 下列為正確寫法:
SELECT * FROM "myTable" WHERE "bitString" = CAST('0101' AS BIT(4));

-- 下列為錯誤寫法:
SELECT * FROM "myTable" WHERE "bitString" = CAST(5 AS BIT(4));

PostgreSQL 允許將數值字義轉換成 BIT/BIT VARYING ,故上述的錯誤寫法在 PostgreSQL 中是可用的。

CHAR, CHAR VARYING, VARCHAR

SQL92 要求指定長度。PostgreSQL 允許省略長度。最大長度則依 DBMS 實作細節而定, The maximum value of <length> is implementation-defined.(SQL92)。

DBMSMaximum length
Sybase255
Oracle4000
SQL Server8000, (NCHAR is 4000)
DB232704
PostgreSQLany size
相關資訊
樂多舊網址: http://blog.roodo.com/rocksaying/archives/5762925.html