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
当超出部分是有效的字符的时候,报错。
但是,当使用明确的类型转换为最大字符数的时候,截断为最大长度,不报错。
posted @ 2021-11-03 10:49  数据库集中营  阅读(1001)  评论(0编辑  收藏  举报