面對激烈的國際競爭和不確定不穩定因素明顯上升的外部環境,加快推進國內信息技術產業發展,構建安全、自主的信息技術應用創新體系迫在眉睫。作為國內XC產業資料庫領域的領軍企業,南大通用推出的OLTP型資料庫產品——GBase 8s,已在金融、電信、電力、交通、政府、軍工等多個行業用戶完成測試,驗證了8s的穩定性和性能。GBase 8s是如何兼容Oracle的,讓我們從數據類型說起。
1.字符
Oracle中包含6種字符類型:CHAR、NCHAR、VARCHAR、VARCHAR2、NVARCHAR2、LONG。具體如下:
1)CHAR
CHAR類型,定長字符串,會用空格填充來達到其最大長度。CHAR欄位最多可以存儲2,000位元組的信息。
2)VARCHAR
VARCHAR是標準SQL的寫法,可變長字符串,可以存儲空字符串。
3)VARCHAR2
變長字符串,與CHAR類型不同,是oracle特有的欄位,它不會使用空格填充至最大長度。VARCHAR2最多可以存儲4,000位元組的信息。
4)NCHAR
包含UNICODE格式數據的定長字符串。NCHAR欄位最多可以存儲2,000位元組的信息。它的最大長度取決於國家字符集。
5)NVARCHAR2
包含UNICODE格式數據的變長字符串。 NVARCHAR2最多可以存儲4,000位元組的信息。
6)LONG
存儲變長字符串,最多達2G的字符數據(2GB是指2千兆字節, 而不是2千兆字符),與VARCHAR2 或CHAR 類型一樣,存儲在LONG 類型中的文本要進行字符集轉換。ORACLE建議開發中使用CLOB替代LONG類型。支持LONG 列只是為了保證向後兼容性。CLOB類型比LONG類型的限制要少得多。
GBase 8s除了LONG和VARCHAR2類型外,對Oracle字符類型全部可以兼容,LONG類型可用CLOB替代,而VARCHAR2建議用VARCHAR替代, NVARCHAR2建議用NVARCHAR替代。此外GBase 8s還支持LVARCHAR類型,變長字符串,默認為2048位元組,最大支持32739位元組。
GBase 8s中驗證如下:
2.數字
Oracle包含5種數字類型:INT、NUMBER、FLOAT、BINARY_FLOAT、BINARY_DOUBLE。具體如下:
1)NUMBER
NUMBER(P,S)是最常見的數字類型,需要1~22位元組(BYTE)不等的存儲空間。
P 是Precison的英文縮寫,即精度縮寫,表示有效數字的位數,最多不能超過38個有效數字;S是Scale的英文縮寫,可以使用的範圍為-84~127。Scale為正數時,表示從小數點到最低有效數字的位數,它為負數時,表示從最大有效數字到小數點的位數。
2)INT / INTEGER
INT是NUMBER的子類型,它等同於NUMBER(38,0),用來存儲整數。若插入、更新的數值有小數,則會被四捨五入。
3)FLOAT
一個ANSI數據類型,也是NUMBER的子類型。精度為126位二進位、38位十進位的浮點數。
4)BINARY_FLOAT
BINARY_FLOAT 是 32 位、 單精度浮點數字數據類型,採用二進位精度。可以支持至少6位精度,每個 BINARY_FLOAT 的值需要 5 個字節,包括長度字節。
5)BINARY_DOUBLE
BINARY_DOUBLE 是為 64 位,雙精度浮點數字數據類型,採用二進位精度。每個 BINARY_DOUBLE 的值需要 9 個字節,包括長度字節。
GBase 8s除了BINARY_FLOAT和BINARY_DOUBLE類型外需要用DOUBLE PRECISION替代外,對Oracle數值類型全部可以兼容,需要注意的是,GBase 8s中的NUMBER類型以名為NUMERIC的類型出現,區別在於精度不超過32個有效數字,小數點後位數不大於精度位數,此外,GBase 8s還提供MONEY貨幣值類型,支持用貨幣字符進行格式化。
GBase 8s中驗證如下:
3.時間&日期
Oracle包含4種時間及日期類型:DATE、TIMESTAMP、INTERVAL YEAR TO MONTH、INTERVAL DAY TO SECOND。具體如下:
1)DATE
DATE是最常用的數據類型,日期數據類型存儲日期和時間信息。雖然可以用字符或數字類型表示日期和時間信息,但是日期數據類型具有特殊關聯的屬性。為每個日期值,Oracle 存儲以下信息: 世紀、 年、 月、 日期、 小時、 分鐘和秒。一般佔用7個字節的存儲空間。
2)TIMESTAMP
這是一個7位元組或12位元組的定寬日期/時間數據類型。它與DATE數據類型不同,因為TIMESTAMP可以包含小數秒,帶小數秒的TIMESTAMP在小數點右邊最多可以保留9位。
3)INTERVAL YEAR TO MOTH
用來存儲單位為年和月的時間間隔。
4)INTERVAL DAY TO SECOND
用來存儲單位為天和秒的時間間隔。
GBase 8s對Oracle日期類型全部可以兼容,但要說明的是,Oracle中的date對應GBase 8s中的datetime year to second,GBase 8s中的date默認僅支持年月日,不支持時分秒,而Oracle中timestamp(p)則對應GBase 8s中的datetime year to fraction(min(5,p)),最多保留小數點後5位。
GBase 8s中驗證如下:
4.大對象
Oracle包含4種大對象類型BLOB、CLOB、NCLOB、BFILE,存儲長度都為4G。具體如下:
1)CLOB
內部字符大對象,存儲單字節和多字節字符數據。支持固定寬度和可變寬度的字符集,常用於大文本的存儲。
2)NCLOB
國家語言字符集大對象,存儲UNICODE類型的數據,支持固定寬度和可變寬度的字符集。
3)BLOB
內部二進位大對象,存儲非結構化的二進位數據大對象,它可以被認為是沒有字符集語義的比特流,一般是圖像、聲音、視頻等文件。
4)BFILE
外部二進位文件,存儲在資料庫外的系統文件,只讀的,資料庫會將該文件當二進位文件處理。
GBase 8s對Oracle的CLOB和BLOB類型可以兼容,且最大支持4T,但對NCLOB和BFILE類型暫未支持,建議可用CLOB和BLOB替代。此外GBase 8s還另外支持BYTE和TEXT類型,最大均為2G。
GBase 8s中驗證如下:
5.其他類型
除以上常用類型外,Oracle還包含RAW、LONG RAW、ROWID及UROWID類型。具體如下:
1)RAW
用於存儲二進位或字符類型數據,變長二進位數據類型,這說明採用這種數據類型存儲的數據不會發生字符集轉換。這種類型最多可以存儲2000位元組的信息,建議使用 BLOB 來代替它。
2)LONG RAW
能存儲2GB 的原始二進位數據(不用進行字符集轉換的數據)。建議使用BLOB來代替它。
3)ROWID
ROWID是一種特殊的列類型,稱之為偽列(pseudocolumn)。ROWID偽列在SQL SELECT語句中可以像普通列那樣被訪問。ROWID表示行的地址,ROWID偽列用ROWID數據類型定義。Oracle資料庫中每行都有一個偽列。
4)UROWID
UROWID,它用於表,是行主鍵的一個表示,基於主鍵生成。UROWID與ROWID的區別就是UROWID可以表示各種ROWID,使用較安全。一般是索引組織表在使用UROWID。
GBase 8s默認支持ROWID偽列,RAW和LONG RAW類型可用BLOB類型替代。
GBase 8s中驗證如下:
總結一下,GBase 8s可全面兼容Oracle常見數據類型,對於少數非常用數據類型,需要進行少量代碼改造,或進行相應類型替換。