openGauss和Oracle基础数据类型兼容性详细说明

openGauss和Oracle基础数据类型兼容性详细说明

简介

本文详细介绍openGauss V5.0数据库与Oracle 23C数据库下,基础数据类型的兼容性对比信息。基础数据类型是以Oracle官网文档中Oracle Built-in Data Types章节的内容为基础,并整合从openGauss官网文档中搜集的数据类型描述信息进行比对,将通过对比语法来综合来判断,是否做到兼容Oracle的数据类型。对于兼容性只是通过个人工作经对于数据类型是否使用即使用频率主观判断来综合判断,满足日常应用开发需求即为满足,其实对于异构数据库的数据类型功能也做不到完全一致。

基础数据类型

Oracle数据类型Oracle类型描述openGauss类型描述语法是否兼容
VARCHAR2(size [BYTE | CHAR])Oracle默认最大长度为4000字符或字节;当MAX_STRING_SIZE =EXTENDED时,最大长度为 32767字节或字符
1、openGauss不支持定义字符长度
2、openGauss size单位为字节,最大10MB;
3、当字段定义长度为字符时,从Oracle迁移到openGauss,需要考虑对该字段字符到字节长度的转换,具体需要考虑Oracle源数据库的字符集
支持定义字节长度;不支持定义字符长度
NVARCHAR2(size)Oracle默认最大长度为4000字符或字节;当MAX_STRING_SIZE =EXTENDED时,最大长度为 32767字节或字符
1、openGauss不支持定义字符长度
2、openGauss size单位为字节,最大10MB;
3、在从Oracle迁移到openGauss,需要考虑对该字段字符到字节长度的转换,具体需要考虑Oracle源数据库的字符集
支持
NUMBER [ (p [, s]) ]1、oracle 标度s允许小于0,这时可以存储为科学计数法;
2、oracle的精度p最大为38位;
1、openGauss的标度s取值范围[0,p]
2、openGauss的精度位数为1000精度p取值范围为[1,1000]
支持
FLOAT [(p)]在Oracle中FLOAT [ ( p ) ]是具有精度p的NUMBER数据类型的子类型。FLOAT值在内部表示为NUMBER。精度p的取值范围是1到126位二进制数字。FLOAT值需要1 ~ 22个字节。根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示,存储空间同样需要4字节或8字节。如不指定精度,内部用DOUBLE PRECISION表示,精度p取值范围为[1,53]。支持
LONG可变长度的字符数据,最大可达2GB可以用TEXR字段类型替换,字段存储最大不超过1G不支持
DATE1、Oracle的DATE类型包括日期和时间值;
4字节(兼容模式A下存储空间大小为8字节),默认情况只包含日期支持
BINARY_FLOATOracle是32位单精度浮点数数据类型,范围为1.17549E-38F~3.40282E+38F;
openGauss也是32位双精度浮点数数据类型,范围为-3.402E+38~3.402E+38,6位十进制数字精度
可用FLOAT4替换
不支持
BINARY_DOUBLEOracle的BINARY_DOUBLE是64位双精度浮点数数据类型,范围为2.22507485850720E-308~1.79769313486231E+308;openGauss也是64位双精度浮点数数据类型,范围为-1.79E+308~1.79E+308,15位十进制数字精度支持
TIMESTAMP [(fractional_seconds_precision)]Oracle的fractional_seconds_precision是second datetime字段小数部分的位数,fractional_seconds_precision取值范围为0 ~ 9。默认值是6。openGauss的fractional_seconds_precision,取值范围为0~6
支持
TIMESTAMP
[(fractional_seconds_precision
)] WITH TIME ZONE
TIMESTAMP的所有值以及时区位移值,其中fractional_seconds_precision是SECOND datetime字段小数部分的位数。
取值范围为0 ~ 9。默认值是6。
日期和时间,带时区。TIMESTAMP的别名为TIMESTAMPTZ。p表示小数点后的精度,取值范围为0~6。openGauss的该字段类型功能等价于TIMESTAMP WITH LOCAL TIME ZONE支持
TIMESTAMP
[(fractional_seconds_precision
)] WITH LOCAL TIME ZONE
TIMESTAMP WITH TIME ZONE的所有值,但有以下例外:
数据存储在数据库中时,会被归一化为数据库时区。
当数据被检索时,用户看到会话时区的数据。方法显式确定默认格式参数NLS_TIMESTAMP_FORMAT或由
NLS_TERRITORY参数。大小为7或11字节,具体取决于精度。
不支持
INTERVAL YEAR [(year_precision)]
TO MONTH
Oracle中以年和月为单位存储一段时间,其中year_precision是YEAR datetime字段中的位数。取值范围为0 ~ 9。默认值是2。
openGauss INTERVAL [FIELDS] [ § ]中的fields:可以是YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,DAY TO HOUR,DAY TO MINUTE,DAY TO SECOND,HOUR TO MINUTE,HOUR TO SECOND,MINUTE TO SECOND支持
INTERVAL DAY [(day_precision)]
TO SECOND
[(fractional_seconds_precision
)]
Oracle中以天、小时、分和秒为单位存储一段时间,其中day_precision是DAY datetime字段的最大位数。取值范围为0 ~ 9。默认值是2。fractional_seconds_precision是SECOND字段小数部分的位数。取值范围为0 ~ 9,默认值是6
openGauss中时间间隔,X天X小时X分X秒。day_precision:天数的精度,取值范围为06。兼容性考虑,目前未实现具体功能。fractional_seconds_precision:秒数的精度,取值范围为06。小数末尾的零不显示支持
RAW(size)oracle的MAX_STRING_SIZE = STANDARD,最大为为2000字节;MAX_STRING_SIZE = EXTENDED,最大为32767字节。最大为1073733621字节支持
LONG RAW最长可达2GB的可变长度的原始二进制数据不支持
ROWID表示表中一行的唯一地址的Base 64字符串。这种数据类型主要用于ROWID伪列返回的值不支持
UROWID [(size)]表示索引组织表的一行的逻辑地址的Base 64字符串。最大大小和默认值是4000字节不支持
CHAR [(size [BYTE | CHAR])]1、Oracle最大长度为2000字符或字节
2、当字段定义长度为字符时,从Oracle迁移到openGauss,需要考虑对该字段字符到字节长度的转换,具体需要考虑Oracle源数据库的字符集
1、不支持定义字符长度
2、openGauss size单位为字节,最大10MB;
支持定义字节长度;不支持定义字符长度
NCHAR[(size)]1、Oracle最大长度为2000字符;
2、在从Oracle迁移到openGauss,需要考虑对该字段字符到字节长度的转换,具体需要考虑Oracle源数据库的字符集
1、openGauss不支持定义字符长度
2、openGauss size单位为字节,最大10MB;
支持
CLOB2、Oracle字段存储最大上限4g(如果修改数据块的大小,可存储上限会增大)openGauss最大支持1g支持
NCLOB最大大小为(4gb - 1) *(数据库块大小)。存储国家字符集数据不支持
BLOB二进制大对象。最大大小为(4GB - 1) *(数据库块大小)最大为1GB-8203字节(即1073733621字节)。支持
BFILE包含存储在数据库外部的大型二进制文件的定位器。允许字节流I/O访问驻留在数据库服务器上的外部lob。最大大小为4GB不支持
JSON最大大小为32MBopenGauss内存在两种数据类型JSON和JSONB,可以用来存储JSON数据。其中JSON是对输入的字符串的完整拷贝,使用时再去解析,所以它会保留输入的空格、重复键以及顺序等;JSONB解析输入后保存的二进制,它在解析时会删除语义无关的细节和重复的键,对键值也会进行排序,使用时不用再次解析支持
BOOLEANBOOLEAN数据类型对应的值包含True和Falsetrue:真false:假null:未知(unknown)支持

总结

总之,openGauss数据库A兼容模式下,对基础数据类型兼容性较高,虽然在数据类型兼容方面仍然存在如下的问题:1、数据类型LONG、BINARY_FLOAT即使语法不兼容,但是在openGauss中也可以其他的类型替换;2、openGauss不支持定义字符长度,也可以通过对openGauss迁移后的字段长度扩容间接进行支持;3、ROWID、NCLOB等类型字段类型不支持,但是在实际应用开发中使用率也比较低,对整体项目的迁移影响还是有限。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨竹~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值