kingbase字符类数据类型和oracle字符类型的区别
为兼容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
当超出部分是有效的字符的时候,报错。
但是,当使用明确的类型转换为最大字符数的时候,截断为最大长度,不报错。
知识分享,需人人参与,看完请点赞留言,共同讨论进步