選擇一個正確的數(shù)據(jù)類型,這看上去再容易不過了,但我們屢屢見到選擇不當(dāng)?shù)那闆r。要選擇什么類型來存儲你的數(shù)據(jù),這是一個最基本的決定,而且這個決定會在以后的數(shù)年間影響著你的應(yīng)用和數(shù)據(jù)。因此選擇適當(dāng)?shù)臄?shù)據(jù)類型至關(guān)重要,而且很難事后再做改變,也就是說,一旦選擇某些類型實現(xiàn)了應(yīng)用,在相當(dāng)長的時間內(nèi)就只能“忍耐”,因為你選擇的類型可能不太合適。
上面這段話來自 Thomas Kyte(Oracle公司核心技術(shù)集團副總裁)的——《Oracle Database 9i/10g/11g編程藝術(shù)》。我對這段話描述的情況感同身受,因此引用了過來。本文第二節(jié)內(nèi)容來自該書第 12 章第一節(jié)——《Oracle 數(shù)據(jù)類型概述》,有刪改。
Oracle 數(shù)據(jù)類型概述
Oracle 提供了 22 種不同的 SQL 數(shù)據(jù)類型供我們使用,分別如下:
CHAR:這是一種定長字符串,會用空格填充來達到其最大長度。非 null 的 CHAR(10) 總是包含 10 字節(jié)信息,使用默認 NLS 設(shè)置,CHAR 最多可以存儲 2000 字節(jié)的信息。
NCHAR:這是一種包含 UNICODE 格式數(shù)據(jù)的定長字符串。有了 NCHAR 類型,就允許數(shù)據(jù)庫中包含采用兩種不同字符集的數(shù)據(jù):使用數(shù)據(jù)庫字符集的 CHAR 類型和使用國家字符集的 NCHAR 類型。非 null 的 NCHAR(10) 總是包含 10 個字符的信息,NCHAR 最多可以存儲 2000 字節(jié)的信息。
VARCHAR2:目前這也是 VARCHAR 的同義詞。這是一種變長字符串,與 CHAR 類型不同,它不會用空格填充至最大長度。VARCHAR2(10) 可能包含 0~10 字節(jié)的信息,使用默認 NLS 設(shè)置,VARCHAR2 最多可以存儲 4000 字節(jié)的信息。
NVARCHAR2:這是一種包含 UNICODE 格式數(shù)據(jù)的變長字符串。NVARCHAR2(10) 可以包含 0~10 個字符的信息,NVARCHAR2 最多可以存儲 4000 字節(jié)的信息。
RAW:這是一種變長的二進制數(shù)據(jù)類型,采用這種數(shù)據(jù)類型存儲的數(shù)據(jù)不會發(fā)生字符集轉(zhuǎn)換。可以把它看作是由數(shù)據(jù)庫存儲的信息的二進制字節(jié)串。RAW 最多可以存儲 2000 字節(jié)的信息。
NUMBER:這種數(shù)據(jù)類型能存儲精度多達 38 位的數(shù)字。這些數(shù)介于 1.0 * 10-130 至 1.0 * 10 126(不含)之間。每個數(shù)存儲在一個變長字段中,其長度在 0(尾部的 NULL 列就是 0 字節(jié))~22字節(jié)之間。Ora