kingbase字符類數據類型和oracle字符類型的區別


為兼容Oracle的數據類型,KingbaseES擴展了Oracle的 NUMBERVARCHAR2CHAR(n)DATE 類型。該措施使得移植Oracle的 Create Table DDL語句時,無需任何修改就能直接在KingbaseES環境中運行。
KingbaseES 雖然擴展了oracle的字符類型,但是相同數據類型之間仍舊存在些許區別:
數據類型 KingbaseES Oracle
CHARACTER(n)
CHAR(n)
NCHAR(n)
char表示一個字符
Byte表示一個字節
默認為1
值域:10485760 char | byte。
值域:11g 默認值 1
CHAR=2000 byte|char
NCHAR=2000 byte
12c最大支持到32k(32767)
CHARACTER VARYING(n) NVARCHAR(n)
NVARCHAR2(n)
VARCHAR(n)
VARCHAR2(n)
值域:10485760 char | byte。
默認長度:可以不指定,默認沒有限制。
值域:11g
VARCHAR2=4000 char|byte
NVARCHAR2=4000 byte
默認長度:VARCHAR2必須指定長度
12c最大支持到32k(32767)

        下面通過一些例子來驗證:

1. 數據類型的最大長度

  • Oracle11g
char類型的最大長度是2000字節,varchar2是4000個字節。nchar,nvarchar2類型的最大長度根據數據集不同而不同。最終的byte數不能超過2000和4000。如字符集為AL16UTF16,則nchar的為2000/2=1000,而nvarchar2則為4000/2=2000
  • KingbaseES
理論最大數據長度是1G,默認值是10485760。

test=# create table k_test1(name char(10485761));

錯誤:  類型 char 的長度不能超過 10485760

2. 默認值

  • Oracle
char類型,不帶字符數的時候,是1個字符(char(1)),而varchar2必須有字符數。nchar和nvarchar2分別與char,varchar2類似。
 
  • KingbaseES
char類型,不帶字符數的時候,也是默認一個字符(char(1)),而varchar不帶字符數的時候,沒有限制。

3. 插入數據庫的時候,字符數超出最大長度部分的處理

  • Oracle
報錯:ORA-12899: value too large for column "SYS"."O_TEST1"."ADDR" (actual: 6,maximum: 5)
  • KingbaseES
當超出部分是有效的字符的時候,報錯。
但是,當使用明確的類型轉換為最大字符數的時候,截斷為最大長度,不報錯。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM