Oracle常用數(shù)據(jù)類(lèi)型

CHAR Data Type

CHAR是用數(shù)據(jù)庫(kù)字符集定義的長(zhǎng)度固定的字符串類(lèi)型寿谴,其定義方式如下:

CHAR [ (size [ BYTE | CHAR ]) ]

中括號(hào)中的內(nèi)容是可選項(xiàng)的贴谎,size表示字符串的長(zhǎng)度 ,BYTECHAR表示長(zhǎng)度單位高诺。BYTE是指字符串的字節(jié)數(shù)踱讨,CHAR是指根據(jù)數(shù)據(jù)庫(kù)字符集中的碼點(diǎn)為單位的長(zhǎng)度,也就是說(shuō)如果碼點(diǎn)是2個(gè)字節(jié)持偏,size定義為3驼卖,那么一共就是6個(gè)字節(jié)。
如果省略長(zhǎng)度單位鸿秆,那么默認(rèn)由NLS_LENGTH_SEMANTICS這個(gè)參數(shù)決定酌畜,一般是BYTE
CHAR中存儲(chǔ)的數(shù)據(jù)具有固定長(zhǎng)度谬莹,如果長(zhǎng)度小于size檩奠,會(huì)用空白符填充桩了。
如果省略size,那么默認(rèn)就是1埠戳。
size最大值為2000井誉,表示2000個(gè)字節(jié)或字符(碼點(diǎn))。由于可以存儲(chǔ)在CHAR中的數(shù)據(jù)最大為2000字節(jié)整胃,因此如果字符集中的碼點(diǎn)大于1個(gè)字節(jié)颗圣,那么就無(wú)法存儲(chǔ)2000個(gè)字符。如果希望存儲(chǔ)任何數(shù)據(jù)庫(kù)字符集中的字符屁使,那么size必須小于等于500(一般碼點(diǎn)最多4個(gè)字節(jié))在岂。

NCHAR Data Type

NCHAR是用國(guó)家字符集定義的長(zhǎng)度固定的字符串類(lèi)型,國(guó)家字符集可以指定為AL16UTF16或UTF8蛮寂。其定義方式如下:

NCHAR [ (size) ]

中括號(hào)中的內(nèi)容是可選項(xiàng)的蔽午,size表示字符串的長(zhǎng)度 或者可以說(shuō)有多少個(gè)碼點(diǎn),一個(gè)碼點(diǎn)在AL16UTF16中始終具有2個(gè)字節(jié)酬蹋,而在UTF8中始終具有1至3個(gè)字節(jié)(UTF8不等于UTF-8及老,UTF8是oracle中定義的字符集,它對(duì)應(yīng)于CESU-8)范抓。
NCHAR中存儲(chǔ)的數(shù)據(jù)具有固定長(zhǎng)度骄恶,如果長(zhǎng)度小于size,會(huì)用空白符填充(如果是UTF-8匕垫,那么字節(jié)數(shù)不一定相同)僧鲁。
如果省略size,那么默認(rèn)就是1象泵。
當(dāng)國(guó)家字符集為AL16UTF16時(shí)寞秃,size最大值為1000個(gè)字符,當(dāng)國(guó)家字符集為UTF8時(shí)单芜,size最大值為2000個(gè)字符蜕该。但是需要注意的是NCHAR最多只能存儲(chǔ)2000個(gè)字節(jié),因此如果你希望始終能夠存儲(chǔ)size個(gè)國(guó)家字符集中的字符洲鸠,那么size必須小于等于666(2000/3)堂淡。

VARCHAR2 Data Type

VARCHAR2是數(shù)據(jù)庫(kù)字符集定義的可變長(zhǎng)的字符串類(lèi)型,其定義格式如下:

VARCHAR2 (size [ BYTE | CHAR ])

其中size必須指定扒腕,BYTECHAR可以省略绢淀。BYTE是指字符串的字節(jié)數(shù),CHAR是指根據(jù)數(shù)據(jù)庫(kù)字符集中的碼點(diǎn)為單位的長(zhǎng)度瘾腰,一個(gè)碼點(diǎn)可以具有1到4個(gè)字節(jié)(這點(diǎn)跟NCHAR不同皆的,主要是它們使用了不同的字符集)。如果未指定長(zhǎng)度單位蹋盆,默認(rèn)由NLS_LENGTH_SEMANTICS這個(gè)參數(shù)決定费薄,一般是BYTE硝全。
size最小值為1,最大值為:

  • 32767字節(jié)楞抡,如果 MAX_STRING_SIZE = EXTENDED
  • 4000字節(jié)伟众,如果 MAX_STRING_SIZE = STANDARD

根據(jù)MAX_STRING_SIZE的參數(shù)不同,VARCHAR2最多能存儲(chǔ)32767或4000字節(jié)召廷。如果你希望始終能夠存儲(chǔ)size個(gè)數(shù)據(jù)庫(kù)字符集中的字符凳厢,那么size必須小于等于8191(32767/4,MAX_STRING_SIZE = EXTENDED)或1000(4000/4竞慢,MAX_STRING_SIZE = STANDARD)先紫。

VARCHAR Data Type

不要使用VARCHAR數(shù)據(jù)類(lèi)型,請(qǐng)改用VARCHAR2數(shù)據(jù)類(lèi)型筹煮。盡管該VARCHAR數(shù)據(jù)類(lèi)型當(dāng)前是VARCHAR2的同義詞遮精,但未來(lái)會(huì)重新定義。

NVARCHAR2 Data Type

NVARCHAR2是用國(guó)家字符集定義的可變長(zhǎng)的字符串類(lèi)型寺谤,國(guó)家字符集可以指定為AL16UTF16或UTF8仑鸥。其定義方式如下:

NVARCHAR2 (size )

其中size必須指定吮播,表示多少個(gè)字符或者更確切地說(shuō)表示多少個(gè)國(guó)家字符集中的碼點(diǎn)变屁。一個(gè)碼點(diǎn)在AL16UTF16中始終具有2個(gè)字節(jié),而在UTF8中始終具有1至3個(gè)字節(jié)意狠。
size最小值為1粟关,最大值為:

  • 16383 MAX_STRING_SIZE = EXTENDED并且國(guó)家字符集為AL16UTF16
  • 32767 MAX_STRING_SIZE = EXTENDED并且國(guó)家字符集是UTF8
  • 2000 MAX_STRING_SIZE = STANDARD并且國(guó)家字符集為AL16UTF16
  • 4000 MAX_STRING_SIZE = STANDARD國(guó)家字符集為UTF8

根據(jù)MAX_STRING_SIZE的參數(shù)不同,NVARCHAR2最多能存儲(chǔ)32767或4000字節(jié)环戈。如果你希望始終能夠存儲(chǔ)size個(gè)國(guó)家字符集中的字符闷板,那么size必須小于等于10922(32767/3,MAX_STRING_SIZE = EXTENDED院塞,國(guó)家字符集定義為UTF8)或1333(4000/3遮晚, MAX_STRING_SIZE = STANDARD,國(guó)家字符集定義為UTF8)拦止。

NUMBER Data Type

NUMBER數(shù)據(jù)類(lèi)型可以存儲(chǔ)零县遣、正定點(diǎn)數(shù)和負(fù)定點(diǎn)數(shù),絕對(duì)值取值范圍從1.0 x 10-130到1.0 x 10126汹族。其定義格式如下:

NUMBER [ (precision [, scale ]) ]
  • precision表示精度萧求,也就是十進(jìn)制數(shù)的最大有效位。其中最高有效數(shù)字是最左邊的非零數(shù)字顶瞒,最低有效數(shù)字是最右邊的數(shù)字夸政。Oracle保證數(shù)字的可移植性,精度的取值范圍從1到38榴徐。
  • scale表示范圍或小數(shù)位的位數(shù)守问,取值范圍從-84到127匀归。
    如果scale是正數(shù),它表示從小數(shù)點(diǎn)右邊到最低有效位的位數(shù)(包括最低有效位數(shù))耗帕。
    如果scale是負(fù)數(shù)朋譬,它表示小數(shù)點(diǎn)左邊的位數(shù)(不包括最低有效位數(shù))。最低有效數(shù)字在小數(shù)點(diǎn)的左側(cè)兴垦,因?yàn)閷?shí)際數(shù)據(jù)會(huì)四舍五入到小數(shù)點(diǎn)左側(cè)的指定位數(shù)徙赢。例如(10,-2) 表示四舍五入到100。
    注:如果小數(shù)點(diǎn)左邊有效位數(shù)小于等于scale探越,那么數(shù)據(jù)會(huì)變?yōu)?狡赐。

scale可以比precision大,典型的用法是帶e符號(hào)的小數(shù)钦幔。當(dāng)scale大于precision時(shí)枕屉,precision指定小數(shù)點(diǎn)右邊的最大有效位數(shù)(小數(shù)點(diǎn)左邊不可能有有效位了,因?yàn)橐坏┯械脑?code>precision必然大于scale鲤氢,這跟這里討論的情況不一致)搀擂。例如,NUMBER(4,5)要求小數(shù)點(diǎn)后的第一位為零卷玉,并將所有值四舍五入到小數(shù)點(diǎn)后的第五位哨颂。
指定定點(diǎn)數(shù)的precisionscale是最佳實(shí)踐,它可以對(duì)輸入進(jìn)行額外的完整性檢查相种。定義precisionscale并不會(huì)強(qiáng)制所有值必須是固定長(zhǎng)度威恼。如果值超過(guò)precision,則Oracle返回錯(cuò)誤寝并。如果值超過(guò)scale箫措,則Oracle對(duì)其進(jìn)行四舍五入。
定義整數(shù):

NUMBER(p)

它表示定點(diǎn)數(shù)衬潦,等價(jià)于NUMBER(p,0)斤蔓。
定義浮點(diǎn)數(shù):

NUMBER 

省略precisionscale指示Oracle使用NUMBER的最大范圍和精度。

NUMBER使用案例.png

FLOAT Data Type
FLOAT [ (precision) ]

FLOAT數(shù)據(jù)類(lèi)型是NUMBER的子類(lèi)型镀岛∠夷担可以指定precision,也可以不指定precision哎媚,其定義與NUMBERprecision相同喇伯,范圍從1到126。scale不能被定義拨与,但是可以從數(shù)據(jù)中解釋稻据。每一個(gè)FLOAT值需要1到22個(gè)字節(jié)。
要將二進(jìn)制precision轉(zhuǎn)換成十進(jìn)制precision,需要乘以0.30103(也就是precisionx0.30103)捻悯。要將十進(jìn)制precision轉(zhuǎn)換為二進(jìn)制precision匆赃,請(qǐng)將十進(jìn)制precision乘以3.32193。二進(jìn)制precision的最大值126位大約等于十進(jìn)制precision的38位。
NUMBERFLOAT之間的區(qū)別可以通過(guò)示例很好地說(shuō)明。在以下示例中宝冕,將相同的值插入NUMBERFLOAT列:

FLOAT與NUMBER的區(qū)別.png

在此示例中,FLOAT返回的值不能超過(guò)5個(gè)二進(jìn)制數(shù)字瞬项。可以由5個(gè)二進(jìn)制數(shù)字表示的最大十進(jìn)制數(shù)是31何荚。最后一行包含的十進(jìn)制值超過(guò)31囱淋。因此,FLOAT必須將該值截?cái)嗖吞粒员闫溆行?shù)字不需要超過(guò)5個(gè)二進(jìn)制數(shù)字妥衣。因此123.45會(huì)四舍五入為120,該位數(shù)只有兩個(gè)有效的十進(jìn)制數(shù)字戒傻,僅需要4個(gè)二進(jìn)制數(shù)字税手。(5x0.30103約等于2,所以FLOAT保留2位有效數(shù)字需纳。)
Oracle建議我們使用BINARY_FLOATBINARY_DOUBLE芦倒,因?yàn)樗鼈冃矢摺?br> 注:FLOAT存儲(chǔ)的是精確值,它是十進(jìn)制精度候齿。

Floating-Point Numbers

浮點(diǎn)數(shù)可以從第一個(gè)數(shù)字到最后一個(gè)數(shù)字的任何地方有小數(shù)點(diǎn)熙暴,或者根本沒(méi)有小數(shù)點(diǎn)』哦ⅲ可以在數(shù)字后面使用指數(shù)來(lái)增加范圍,例如1.777 e -20掂器。scale不適用浮點(diǎn)數(shù)亚皂,因?yàn)樾?shù)點(diǎn)后可以出現(xiàn)的位數(shù)不受限制。
二進(jìn)制Floating-Point在Oracle數(shù)據(jù)庫(kù)中存儲(chǔ)值得方式跟NUMBER不同国瓮。NUMBER使用十進(jìn)制精度存儲(chǔ)值灭必。所有符合NUMBER范圍和精度的字面值都會(huì)作為NUMBER數(shù)據(jù)類(lèi)型精確存儲(chǔ)∧四。可以精確存儲(chǔ)字面值的原因是禁漓,這些值使用十進(jìn)制精度表示(0-9)。二進(jìn)制Floating-Point使用二進(jìn)制精度存儲(chǔ)(0-1)孵睬。二進(jìn)制精度值無(wú)法精確表示所有十進(jìn)制精度值播歼。通常 ,將一個(gè)值從十進(jìn)制精度轉(zhuǎn)換成二進(jìn)制精度掰读,當(dāng)撤銷(xiāo)時(shí)從二進(jìn)制精度轉(zhuǎn)換回十進(jìn)制精度時(shí)會(huì)發(fā)生錯(cuò)誤秘狞。比如0.1叭莫,轉(zhuǎn)換成二進(jìn)制(0.0001100110011001)會(huì)丟失精度。
Oracle數(shù)據(jù)庫(kù)專(zhuān)門(mén)為浮點(diǎn)數(shù)提供了兩種數(shù)據(jù)類(lèi)型:
BINARY_FLOAT

BINARY_FLOAT

BINARY_FLOAT是32位單精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型烁试。每個(gè)BINARY_FLOAT值需要4個(gè)字節(jié)雇初。
BINARY_DOUBLE

BINARY_DOUBLE

BINARY_DOUBLE是64位雙精度浮點(diǎn)數(shù)數(shù)據(jù)類(lèi)型。每個(gè)BINARY_DOUBLE值需要8個(gè)字節(jié)减响。
NUMBER列中靖诗,浮點(diǎn)數(shù)具有十進(jìn)制精度。在BINARY_FLOATBINARY_DOUBLE列中支示,浮點(diǎn)數(shù)具有二進(jìn)制精度呻畸。二進(jìn)制浮點(diǎn)數(shù)支持特殊值infinity和NaN(不是數(shù)字)。

Floating-Point取值范圍.png

參考資源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末悼院,一起剝皮案震驚了整個(gè)濱河市伤为,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌据途,老刑警劉巖绞愚,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異颖医,居然都是意外死亡位衩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)熔萧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)糖驴,“玉大人,你說(shuō)我怎么就攤上這事佛致≈疲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵俺榆,是天一觀的道長(zhǎng)感昼。 經(jīng)常有香客問(wèn)我,道長(zhǎng)罐脊,這世上最難降的妖魔是什么定嗓? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮萍桌,結(jié)果婚禮上宵溅,老公的妹妹穿的比我還像新娘。我一直安慰自己上炎,他們只是感情好恃逻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般辛块。 火紅的嫁衣襯著肌膚如雪畔派。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天润绵,我揣著相機(jī)與錄音线椰,去河邊找鬼。 笑死尘盼,一個(gè)胖子當(dāng)著我的面吹牛憨愉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卿捎,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼配紫,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了午阵?” 一聲冷哼從身側(cè)響起躺孝,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎底桂,沒(méi)想到半個(gè)月后植袍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡籽懦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年于个,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暮顺。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡厅篓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出捶码,到底是詐尸還是另有隱情羽氮,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布宙项,位于F島的核電站乏苦,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏尤筐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一洞就、第九天 我趴在偏房一處隱蔽的房頂上張望盆繁。 院中可真熱鬧,春花似錦旬蟋、人聲如沸油昂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)冕碟。三九已至拦惋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間安寺,已是汗流浹背厕妖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挑庶,地道東北人言秸。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像迎捺,于是被迫代替她去往敵國(guó)和親举畸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354