1. 程式人生 > 其它 >kingbase字元類資料型別和oracle字元型別的區別

kingbase字元類資料型別和oracle字元型別的區別

為相容Oracle的資料型別,KingbaseES擴充套件了Oracle的NUMBERVARCHAR2CHAR(n)DATE型別。該措施使得移植Oracle的Create TableDDL語句時,無需任何修改就能直接在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
當超出部分是有效的字元的時候,報錯。 但是,當使用明確的型別轉換為最大字元數的時候,截斷為最大長度,不報錯。