ITPub博客

首页 > 数据库 > 国内数据库 > GBase 8s兼容Oracle漫谈——数据类型篇

GBase 8s兼容Oracle漫谈——数据类型篇

原创 国内数据库 作者:GBASE南大通用 时间:2021-01-07 16:49:23 0 删除 编辑

面对激烈的国际竞争和不确定不稳定因素明显上升的外部环境,加快推进国内信息技术产业发展,构建安全、自主的信息技术应用创新体系迫在眉睫。作为国内 XC 产业数据库领域的领军企业,南大通用推出的 OLTP 型数据库产品—— GBase 8s ,已在金融、电信、电力、交通、政府、军工等多个行业用户完成测试,验证了 8s 的稳定性和性能。 GBase 8s 是如何兼容 Oracle 的,让我们从数据类型说起。

1. 字符

Oracle 中包含 6 种字符类型: CHAR 、 NCHAR 、 VARCHAR 、 VARCHAR2 、 NVARCHAR2 、 LONG 。具体如下:

1)CHAR

CHAR 类型,定长字符串,会用空格填充来达到其最大长度。 CHAR 字段最多可以存储 2,000 字节的信息。

2)VARCHAR

VARCHAR 是标准 SQL 的写法,可变长字符串,可以存储空字符串。

3)VARCHAR2

变长字符串,与CHAR 类型不同,是 oracle 特有的字段,它不会使用空格填充至最大长度。 VARCHAR2 最多可以存储 4,000 字节的信息。

4)NCHAR

包含UNICODE 格式数据的定长字符串。 NCHAR 字段最多可以存储 2,000 字节的信息。它的最大长度取决于国家字符集。

5)NVARCHAR2

包含UNICODE 格式数据的变长字符串。 NVARCHAR2 最多可以存储 4,000 字节的信息。

6)LONG

存储变长字符串,最多达2G 的字符数据( 2GB 是指 2 千兆字节, 而不是 2 千兆字符),与 VARCHAR2 或 CHAR 类型一样,存储在 LONG 类型中的文本要进行字符集转换。 ORACLE 建议开发中使用 CLOB 替代 LONG 类型。支持 LONG 列只是为了保证向后兼容性。 CLOB 类型比 LONG 类型的限制要少得多。

GBase 8s 除了 LONG 和 VARCHAR2 类型外,对 Oracle 字符类型全部可以兼容, LONG 类型可用 CLOB 替代,而 VARCHAR2 建议用 VARCHAR 替代, NVARCHAR2 建议用 NVARCHAR 替代。此外 GBase 8s 还支持 LVARCHAR 类型,变长字符串,默认为 2048 字节,最大支持 32739 字节。

GBase 8s 中验证如下:

 

2. 数字

Oracle 包含 5 种数字类型: INT 、 NUMBER 、 FLOAT 、 BINARY_FLOAT 、 BINARY_DOUBLE 。具体如下:

1)NUMBER

NUMBER(P,S) 是最常见的数字类型,需要 1~22 字节 (BYTE) 不等的存储空间。

P 是 Precison 的英文缩写,即精度缩写,表示有效数字的位数,最多不能超过 38 个有效数字; S 是 Scale 的英文缩写,可以使用的范围为 -84~127 。 Scale 为正数时,表示从小数点到最低有效数字的位数,它为负数时,表示从最大有效数字到小数点的位数。

2)INT / INTEGER

INT 是 NUMBER 的子类型,它等同于 NUMBER ( 38,0 ),用来存储整数。若插入、更新的数值有小数,则会被四舍五入。

3)FLOAT

一个ANSI 数据类型,也是 NUMBER 的子类型。精度为 126 位二进制、 38 位十进制的浮点数。

4)BINARY_FLOAT

BINARY_FLOAT 是 32 位、 单精度浮点数字数据类型 , 采用二进制精度。可以支持至少 6 位精度 , 每个 BINARY_FLOAT 的值需要 5 个字节,包括长度字节。

5)BINARY_DOUBLE

BINARY_DOUBLE 是为 64 位,双精度浮点数字数据类型 , 采用二进制精度。每个 BINARY_DOUBLE 的值需要 9 个字节,包括长度字节。

GBase 8s 除了 BINARY_FLOAT 和 BINARY_DOUBLE 类型外需要用 DOUBLE PRECISION 替代外,对 Oracle 数值类型全部可以兼容,需要注意的是, GBase 8s 中的 NUMBER 类型以名为 NUMERIC 的类型出现,区别在于精度不超过 32 个有效数字,小数点后位数不大于精度位数,此外, GBase 8s 还提供 MONEY 货币值类型,支持用货币字符进行格式化。

GBase 8s 中验证如下:

 

3. 时间 & 日期

Oracle 包含 4 种时间及日期类型: DATE 、 TIMESTAMP 、 INTERVAL YEAR TO MONTH 、 INTERVAL DAY TO SECOND 。具体如下:

1)DATE

DATE 是最常用的数据类型,日期数据类型存储日期和时间信息。虽然可以用字符或数字类型表示日期和时间信息,但是日期数据类型具有特殊关联的属性。为每个日期值, Oracle 存储以下信息: 世纪、 年、 月、 日期、 小时、 分钟和秒。一般占用 7 个字节的存储空间。

2)TIMESTAMP

这是一个7 字节或 12 字节的定宽日期 / 时间数据类型。它与 DATE 数据类型不同,因为 TIMESTAMP 可以包含小数秒,带小数秒的 TIMESTAMP 在小数点右边最多可以保留 9 位。

3)INTERVAL YEAR TO MOTH

用来存储单位为年和月的时间间隔。

4)INTERVAL DAY TO SECOND

用来存储单位为天和秒的时间间隔。

GBase 8s 对 Oracle 日期类型全部可以兼容,但要说明的是, Oracle 中的 date 对应 GBase 8s 中的 datetime year to second , GBase 8s 中的 date 默认仅支持年月日,不支持时分秒,而 Oracle 中 timestamp(p) 则对应 GBase 8s 中的 datetime year to fraction(min(5,p)) ,最多保留小数点后 5 位。

GBase 8s 中验证如下:

 

4. 大对象

Oracle 包含 4 种大对象类型 BLOB 、 CLOB 、 NCLOB 、 BFILE ,存储长度都为 4G 。具体如下:

1)CLOB

内部字符大对象,存储单字节和多字节字符数据。支持固定宽度和可变宽度的字符集,常用于大文本的存储。

2)NCLOB

国家语言字符集大对象,存储UNICODE 类型的数据,支持固定宽度和可变宽度的字符集。

3)BLOB

内部二进制大对象,存储非结构化的二进制数据大对象,它可以被认为是没有字符集语义的比特流,一般是图像、声音、视频等文件。

4)BFILE

外部二进制文件,存储在数据库外的系统文件,只读的,数据库会将该文件当二进制文件处理。

GBase 8s 对 Oracle 的 CLOB 和 BLOB 类型可以兼容,且最大支持 4T ,但对 NCLOB 和 BFILE 类型暂未支持,建议可用 CLOB 和 BLOB 替代。此外 GBase 8s 还另外支持 BYTE 和 TEXT 类型,最大均为 2G 。

GBase 8s 中验证如下:

 

5. 其他类型

除以上常用类型外,Oracle 还包含 RAW 、 LONG RAW 、 ROWID 及 UROWID 类型。具体如下:

1)RAW

用于存储二进制或字符类型数据,变长二进制数据类型,这说明采用这种数据类型存储的数据不会发生字符集转换。这种类型最多可以存储2000 字节的信息,建议使用 BLOB 来代替它。

2)LONG RAW

能存储2GB 的原始二进制数据(不用进行字符集转换的数据)。建议使用 BLOB 来代替它。

3)ROWID

ROWID 是一种特殊的列类型,称之为伪列( pseudocolumn )。 ROWID 伪列在 SQL SELECT 语句中可以像普通列那样被访问。 ROWID 表示行的地址, ROWID 伪列用 ROWID 数据类型定义。 Oracle 数据库中每行都有一个伪列。

4)UROWID

UROWID ,它用于表,是行主键的一个表示,基于主键生成。 UROWID 与 ROWID 的区别就是 UROWID 可以表示各种 ROWID ,使用较安全。一般是索引组织表在使用 UROWID 。

GBase 8s 默认支持 ROWID 伪列, RAW 和 LONG RAW 类型可用 BLOB 类型替代。

GBase 8s 中验证如下:

 

总结一下,GBase 8s 可全面兼容 Oracle 常见数据类型,对于少数非常用数据类型,需要进行少量代码改造,或进行相应类型替换。

 


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69979120/viewspace-2748254/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
GBASE南大通用,致力于成为用户最信赖的数据库产品供应商!

注册时间:2020-07-16

  • 博文量
    1329
  • 访问量
    1318641