為兼容Oracle的數據類型,KingbaseES擴展了Oracle的
NUMBER、
VARCHAR2、
CHAR(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
當超出部分是有效的字符的時候,報錯。
但是,當使用明確的類型轉換為最大字符數的時候,截斷為最大長度,不報錯。