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