GBase 8s兼容Oracle漫談——數據類型篇

2021-01-08 GBASE資料庫

面對激烈的國際競爭和不確定不穩定因素明顯上升的外部環境,加快推進國內信息技術產業發展,構建安全、自主的信息技術應用創新體系迫在眉睫。作為國內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常見數據類型,對於少數非常用數據類型,需要進行少量代碼改造,或進行相應類型替換。

相關焦點

  • Oracle 19C rac集群靜默安裝操作手冊v2.0 for centos7
    # mkdir /opt/oracle2.# mkdir /opt/oracle/dbbase3.# mkdir /opt/oracle/gbase4.# mkdir /opt/oracle/ghome5.# mkdir /opt/oracle/oraInventory6.# chown -R grid:oinstall
  • STM8 STM32 數據類型
    ▲  STM32F10x_StdPeriph_Driver 3.0以後的版本中使用了CMSIS數據類型3.0以後版本與之前版本變量的定義有所不同,但是出於兼容舊版本的目的,以上的數據類型仍然兼容。CMSIS的IO類型限定詞如表 3所示,CMSIS和STM32固件庫的數據類型對比如表 5所示。
  • Oracle資料庫參數優化參考
    下面為一些參數調優參考:一、db_file_multiblock_read_count:oracle讀取數據有兩種方式:1)通過rowid(即索引掃描)2)通過全表掃描如果是全表掃描時,oracle會一次讀取多個blocks,每次讀取的塊數將受初始化參數db_file_multiblock_read_count和作業系統的
  • 零基礎學Oracle之4:理解oracle的啟動與關閉
    Oracle資料庫的啟動可以分為四個階段startup順序1) shutdown:沒有啟動,oracle的表現就是一堆存在磁碟的文件,軟體是軟體,數據是數據。但在這個階段不會確認數據文件和重做日誌文件的存在。4) open打開資料庫文件和重做日誌文件。這時資料庫就可以被正常訪問。
  • oracle 查詢昨天記錄專題及常見問題 - CSDN
    eg: In kkjssrh() does "now = slgcs(&se)" and compares thatto a previous timestamp.好麼,原來是計時器溢出了,一檢查我的主機:bash-2.03$ uptime10:00pm up 500 day(s), 14:57, 1 user, load average: 1.31, 1.09, 1.08bash-2.03$ dateFri Nov 19 22:00:14 CST 2004剛好到事發時是
  • 第四篇:JavaScript基本數據類型
    JavaScript基本數據類型有String(字符串類型)、Number(數字類型)、Boolean(布爾類型)、Array(數組類型)、Date(日期類型)。不同於Java語言,JS 語言是弱數據類型,聲明變量時不需要說明數據類型,JS解釋器會自動根據變量的值賦予變量對應的數據類型。
  • 零基礎學Oracle之2:開始使用oracle
    零基礎學Oracle之2:開始使用oracle1、 資料庫管理工具OUI:安裝使用,自帶的DBCA:圖形化創建資料庫,初學者使用SQL*PLUS:重點掌握OEM:外圍產品2、 OUI:統一安裝器而oracle則力推java,把java虛擬機內嵌到oracle中。[oracle@wl database]$ ./runInstaller 在資料庫軟體目錄下執行這個安裝,類似於windows的setup
  • oracle 查詢 今天、昨天、本周、本月、本季度的所有記錄
    eg: In kkjssrh() does "now = slgcs(&se)" and compares thatto a previous timestamp.好麼,原來是計時器溢出了,一檢查我的主機:bash-2.03$ uptime10:00pm up 500 day(s), 14:57, 1 user, load average: 1.31, 1.09, 1.08bash-2.03$ dateFri Nov 19 22:00:14 CST 2004剛好到事發時是
  • 零基礎學Oracle之6:Oracle數字字典和動態視圖的理解
    2、數字字典(DD)1)在執行數據定義語言(definition language,DDL)語句或有些數據操縱語言 (data manipulation language ,DML) 語句時會更新數據字典2)有幾個特點存儲在system表空間它是由sys擁有由oracle server自動維護。
  • 5天,2W+字整理資料庫實操指令,附練習題,再說資料庫學不明白
    資料庫存儲數據結構網狀結構層次結構二維表結構:二維表結構可以清晰的將數據與數據之間的關係表述清楚注意:單純的存儲數據很簡單,但是存儲好的數據又要將數據之間的關係描述清楚就會比較困難,所以採用二維表的結構存儲數據會比較合理2、資料庫管理系統oracle:大型資料庫管理系統
  • LabVIEW編程技巧:功能強大的變體數據類型用法
    但是,有時候我們需要設計的子程序具有更強大的靈活性,在一個連接埠上能接入不同的數據類型,在程序內部能自動識別其原始的實際數據類型,然後分別進行不同的處理,這時候變體數據(Variant data)類型就派上用場了。變體數據類型類似於C語言中的void類型的指針,它可以兼容任何數據類型。
  • 引用數據類型的概念_引用數據類型有哪幾種
    在聲明一個變量的引用之後,在本函數執行期間,該引用一直與其代表的變量相聯繫   引用數據類型有哪幾種   Java提供了兩類數據類型:一種是基本類型(原始類型),一種是引用類型。,除了boolean類型所佔長度與平臺有關外,其他數據類型長度都是與平臺無關的。
  • Java數據類型的「誰都看得懂」總結
    而Java的數據類型分為兩大類,分別是基本類型和引用類型,引用類型主要有類、接口和數組等等,那麼這裡主要總結的的是基本類型,基本數據類型呢,又可以分為數值類型和布爾類型(即Boolean類型),布爾類型比較簡單,它只有兩個值(true和false)。數值類型又可以再往下劃分,分別分為整數類型、浮點數類型以及字符類型。
  • 全球首個支持事務一致性, 兼容DB2和Oracle的高速SQL on Hadoop...
    Transwarp Inceptor提供完整的SQL支持,支持主流的SQL模塊化擴展,兼容通用開發框架和工具,支持事務特性保證數據的準確性,允許多租戶的隔離與管理,能夠利用內存或者SSD來加速數據的讀取,支持與關係型資料庫實時對接並做統計分析,輔以高性能的SQL執行引擎,從而能夠給企業提供高性價比和高度可擴展的解決方案。
  • Redis 的 8 大數據類型,寫得非常好!(建議收藏)
    最近這幾天的面試每一場都問到了,但是感覺回答的並不好,還有很多需要梳理的知識點,這裡通過幾篇 Redis 筆記整個梳理一遍。Redis 的八大數據類型Redis-key127.0.0.1:6379> keys *(empty list or set)127.0.0.1:6379> set name xxxOK127.0.0.1:6379> keys *1) "name"127.0.0.1:6379> set age 1OK127.0.0.1:6379>
  • python的核心數據類型有哪些?
    數據類型數字: int,long,float,complex,bool字符: str,unicode列表: list字典: dict元組: tuple文件: file其他類型: 集合(set),frozenset,類類型,None類型轉換str(),repr()或format(): 將非字符類型數據轉換為字符int(): 轉為整數float
  • 漫談「頻率」的那點事情
    若涉及無線電頻率功能、業務類型變更則需要上升到工信部無線電管理委員會協調,如涉及國際頻率協調,由ITU或者國家無委與相關國家進行頻率協調。  4.電磁兼容與電磁幹擾  無線電發射機在發射電磁波時在主載頻外,還會有高次諧波一起伴隨發射,這種無意義的諧波發射會汙染無線電頻譜,一般說來有帶外輻射、雜散輻射、互調幹擾。在電子產品中,原則上所有的振蕩電路都能對外輻射電磁波。
  • GBASE資料庫助力城市軌道交通數據信息國產化
    使用GBase 8s資料庫搭建基於共享存儲的雙機集群,保證車站和線路中央數據伺服器的穩定性和高可用性。系統運行穩定,系統未出現任何影響業務開展的生產問題,總體平穩。目前軌道交通行業中ISCS系統上國內資料庫的唯一廠家。
  • PHP 框架 QueryPHP 1.0.3 發布,兼容 PHP 8.0 和 PHP 8.1
    QueryPHP 1.0.3 僅僅做了對 PHP 8.0 和 PHP 8.1 兼容性處理,修復了 PHP 8 下面的代碼和測試用例。
  • 比較數據中心的網線類型
    網線類型:光纖的來龍去脈   光纖是另一種概念。單模光纖和多模光纖有很大區別。伴隨著1988年實用型垂直腔面發射雷射器(VCSEL)的出現,再後來雷射優化多模光纖(LOMMF)的發展,以及最新採用的OM4光纖標準,高速光纖連接已經兼具了經濟性和實用性,不再需要通過單模光纖的方式,尤其對於數據中心很常見的短距離情況。