oracle與gbase8s遷移數(shù)據(jù)類型對(duì)照以及舉例說明
聲明:以下為筆者閱讀gbase官方文檔和oracle官方文檔的理解,如有錯(cuò)誤,敬請(qǐng)指正。
最終結(jié)論:oracle與gbase8s數(shù)據(jù)類型對(duì)應(yīng)關(guān)系
邊界范圍使用數(shù)據(jù)類型 | oracle | gbase |
---|---|---|
最大精度126位 | FLOAT/NUMBER | DECIMAL |
單精度浮點(diǎn)數(shù)數(shù)據(jù)類型 | BINARY_FLOAT | smallfloat |
雙精度浮點(diǎn)數(shù)數(shù)據(jù)類型 | BINARY_DOUBLE | FLOAT |
下面首先回憶一下精度、定點(diǎn)、浮點(diǎn)的定義,然后再來看oracle、gbase的官方文檔。
關(guān)于單精度與雙精度的區(qū)別
單精度和雙精度是計(jì)算機(jī)中用于表示浮點(diǎn)數(shù)的兩種不同精度的格式。
- 單精度(Single Precision):?jiǎn)尉雀↑c(diǎn)數(shù)使用32位(4個(gè)字節(jié))來存儲(chǔ)一個(gè)浮點(diǎn)數(shù)。它包括一個(gè)符號(hào)位(用于表示正負(fù))、8位指數(shù)和23位尾數(shù)。單精度提供大約7位有效數(shù)字的精度。
- 雙精度(Double Precision):雙精度浮點(diǎn)數(shù)使用64位(8個(gè)字節(jié))來存儲(chǔ)一個(gè)浮點(diǎn)數(shù)。它包括一個(gè)符號(hào)位、11位指數(shù)和52位尾數(shù)。雙精度提供大約15-16位有效數(shù)字的精度,比單精度更高。
主要區(qū)別:
- 精度: 雙精度提供比單精度更高的精度,因?yàn)樗褂酶嗟奈粊肀硎緮?shù)字。這使得雙精度能夠處理更大范圍的數(shù)值,并提供更高的精確度。
- 存儲(chǔ)需求: 雙精度使用的存儲(chǔ)空間是單精度的兩倍,因此在存儲(chǔ)大量數(shù)據(jù)時(shí),雙精度需要更多的內(nèi)存空間。
- 計(jì)算速度: 在某些情況下,單精度計(jì)算可能比雙精度計(jì)算速度更快,因?yàn)樗婕案俚奈粩?shù)和更簡(jiǎn)單的計(jì)算。
選擇使用單精度還是雙精度通常取決于對(duì)精度和內(nèi)存使用的要求。如果需要更高的精度或者處理非常大或非常小的數(shù)值范圍,雙精度可能更適合。而如果對(duì)精度要求不高,但需要節(jié)省內(nèi)存,那么單精度可能更合適。
關(guān)于定點(diǎn)與浮點(diǎn)定義的區(qū)別
定點(diǎn)數(shù)和浮點(diǎn)數(shù)是計(jì)算機(jī)表示數(shù)據(jù)的兩種不同方式。定點(diǎn)數(shù)的小數(shù)點(diǎn)位置在計(jì)算機(jī)的存儲(chǔ)中是約定好的,這意味著小數(shù)位為固定十進(jìn)制數(shù),而浮點(diǎn)數(shù)的小數(shù)位則隨2的幾次冪的大小而浮動(dòng)。例如,8位定點(diǎn)數(shù)可以表示的范圍是-16.00~15.875,其最大精度為0.125。
將浮點(diǎn)數(shù)轉(zhuǎn)換為定點(diǎn)數(shù)的操作包括:首先計(jì)算 b = a * 2^F(a為浮點(diǎn)數(shù),F(xiàn)為小數(shù)部分字長(zhǎng)),然后將b化為整數(shù),最后用二進(jìn)制將b表示成c。這種轉(zhuǎn)換方法在可以接受精度損失的前提下,有可能提高運(yùn)算效率。然而,一般而言,定點(diǎn)數(shù)的數(shù)值范圍有限,要求的處理硬件比較簡(jiǎn)單。
精度的定義
精度是一個(gè)衡量測(cè)量結(jié)果與真實(shí)值接近程度的概念,它反映的是誤差的大小。如果誤差小,則精度高;反之,如果誤差大,則精度低。在計(jì)算機(jī)科學(xué)中,精度也用于表示數(shù)值的最小度量單位,例如,GPS的精度為0.1m,表示這個(gè)GPS最小能識(shí)別0.1m的位置差異。同時(shí),精度還被用來描述計(jì)算機(jī)中小數(shù)點(diǎn)前后的總位數(shù),如單精度和雙精度分別表示精確到小數(shù)點(diǎn)后幾位。然而,需要注意的是,儀器的精度并不能完全反映其準(zhǔn)確度。
Oracle 分為NUMBER和浮點(diǎn)數(shù)
NUMBER
NUMBER
數(shù)據(jù)類型用于存儲(chǔ)可能為負(fù)值或正值的數(shù)值。
數(shù)據(jù)類型存儲(chǔ)定點(diǎn)數(shù)和浮點(diǎn)數(shù)。精度 38 位有效數(shù)字。
NUMBER(p, s):
- 用于存儲(chǔ)數(shù)字值,其中p表示精度(最多38位),s表示小數(shù)位數(shù)取值范圍為[-84~127],當(dāng)s取負(fù)數(shù)時(shí),將小數(shù)點(diǎn)左邊的s位置為0,并四舍五入。
- 當(dāng)小數(shù)位數(shù)大于s時(shí),采用四舍五入的方式。當(dāng)整數(shù)部分的長(zhǎng)度大于p-s時(shí),報(bào)錯(cuò)。
- 需要22個(gè)字節(jié)的存儲(chǔ)空間。
Oracle FLOAT
數(shù)據(jù)類型是NUMBER
數(shù)據(jù)類型的子類型。FLOAT(b):用于存儲(chǔ)浮點(diǎn)數(shù),范圍從-1.79E+308到1.79E+308。FLOAT
的最大精度是126
。二進(jìn)制精度的最大126
位數(shù),大致等于十進(jìn)制數(shù)位數(shù)的38
位數(shù)。
浮點(diǎn)數(shù)
BINARY_FLOAT 數(shù)據(jù)類型
BINARY_FLOAT是 32 位單精度浮點(diǎn)數(shù)數(shù)據(jù)類型。每個(gè)值需要 5 個(gè)字節(jié),包括一個(gè)長(zhǎng)度字節(jié)。BINARY_FLOAT
BINARY_DOUBLE 數(shù)據(jù)類型
BINARY_DOUBLE是 64 位雙精度浮點(diǎn)數(shù)數(shù)據(jù)類型。每個(gè)值需要 9 個(gè)字節(jié),包括一個(gè)長(zhǎng)度字節(jié)。BINARY_DOUBLE
create table t2 (a binary_float,b binary_double); insert into t2 values (3.141592653589,3.141592653589); insert into t2 values (1023.141592653589,1023.141592653589); insert into t2 values (1023.14159265358933333333,1023.14159265358933333333);
gbase 8s 分精確數(shù)值數(shù)據(jù)類型,近似數(shù)值數(shù)據(jù)類型
精確數(shù)值數(shù)據(jù)類型
gbase應(yīng)該是32位最長(zhǎng),oracle是38位
近似數(shù)值數(shù)據(jù)類型
- smallfloat:8位有效數(shù)字的單精度浮點(diǎn)數(shù)值
- float/double:16位有效數(shù)字的雙精度浮點(diǎn)數(shù)值。
建表時(shí),在數(shù)據(jù)類型聲明中接受precision參數(shù),但是該參數(shù)對(duì)數(shù)據(jù)庫(kù)服務(wù)器存儲(chǔ)的值的實(shí)際精度不起作用。
create table t1 (a float,b smallfloat); desc t1; insert into t1 values (3.14,3.14); insert into t1 values (3.1415926,3.1415926); insert into t1 values (3.141592653589,3.141592653589); insert into t1 values (1023.141592653589,1023.141592653589); insert into t1 values (1023.14159265358933333333,1023.14159265358933333333); select * from t1;
可以看出 smallfloat超過8位有效數(shù)字會(huì)截?cái)?/p>
可以看出指定該參數(shù)對(duì)數(shù)據(jù)庫(kù)服務(wù)器存儲(chǔ)的值的實(shí)際精度不起作用。
查看計(jì)算后小數(shù)位數(shù)是decimal類型
總結(jié)
到此這篇關(guān)于oracle與gbase8s遷移數(shù)據(jù)類型對(duì)照以及舉例說明的文章就介紹到這了,更多相關(guān)oracle與gbase8s遷移數(shù)據(jù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Oracle數(shù)據(jù)遷移MySQL的三種簡(jiǎn)單方法
- 如何把Oracle?數(shù)據(jù)庫(kù)從?RAC?集群遷移到單機(jī)環(huán)境
- Oracle通過LogMiner實(shí)現(xiàn)數(shù)據(jù)同步遷移
- Oracle 10g DG 數(shù)據(jù)文件遷移的實(shí)現(xiàn)
- 如何將Oracle的一個(gè)大數(shù)據(jù)表快速遷移到 Sqlserver2008數(shù)據(jù)庫(kù)(圖文教程)
- oracle數(shù)據(jù)遷移到db2數(shù)據(jù)庫(kù)的實(shí)現(xiàn)方法(分享)
- oracle數(shù)據(jù)庫(kù)遷移到MySQL的方法總結(jié)
- 直接拷貝數(shù)據(jù)文件實(shí)現(xiàn)Oracle數(shù)據(jù)遷移
- Oracle數(shù)據(jù)庫(kù)遷移方案
- Oracle數(shù)據(jù)庫(kù)遷移所有文件到新掛載磁盤路徑
相關(guān)文章
使用sqlplus命令行工具為oracle創(chuàng)建用戶和表空間
這篇文章主要介紹了使用sqlplus為oracle創(chuàng)建用戶和表空間的方法,本文介紹的是使用Oracle 9i所帶的命令行工具:SQLPLUS,需要的朋友可以參考下2017-11-11在ORACLE移動(dòng)數(shù)據(jù)庫(kù)文件
在ORACLE移動(dòng)數(shù)據(jù)庫(kù)文件...2007-03-03Oracle內(nèi)存分配不足的過程解析(業(yè)務(wù)干掛數(shù)據(jù)庫(kù))
本文介紹了Oracle數(shù)據(jù)庫(kù)內(nèi)存分配不足的問題,原因主要是業(yè)務(wù)劇增導(dǎo)致的內(nèi)存不足,通過分析AAS負(fù)載、等待事件、transactions和阻塞情況,發(fā)現(xiàn)PGA內(nèi)存出現(xiàn)了嚴(yán)重抖動(dòng),感興趣的朋友一起看看吧2025-02-02在Oracle 8x實(shí)現(xiàn)自動(dòng)斷開后再連接
在Oracle 8x實(shí)現(xiàn)自動(dòng)斷開后再連接...2007-03-03Oracle數(shù)據(jù)庫(kù)失效對(duì)象處理詳情
這篇文章主要介紹了Oracle數(shù)據(jù)庫(kù)失效對(duì)象處理,數(shù)據(jù)庫(kù)業(yè)務(wù)用戶(非 SYS/Public)下存在失效對(duì)象。對(duì)失效對(duì)象進(jìn)行分析,主要包括失效的視圖、物化視圖、函數(shù)、包、觸發(fā)器等,下面帶著些許了解一起深入學(xué)習(xí)下面文章學(xué)習(xí)內(nèi)容吧2021-10-10oracle 監(jiān)聽 lsnrctl 命令 (推薦)
這篇文章主要介紹了oracle 監(jiān)聽 lsnrctl 命令 ,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-03-03