暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

gaussdb和Oracle数据类型兼容性说明

1860

gaussdb和Oracle数据类型兼容性说明

简介

本文详细介绍GaussDB数据库Oracle兼容模式与Oracle数据库19C版本下,数据类型的兼容性对比信息。下面将通过对Oracle和GaussDB数据类型的语法、功能进行比较。本次对于功能是否支持的判断,只是主观的通过个人工作经验判断,满足日常应用开发需求即为满足,其实对于异构数据库的数据类型功能也做不到完全一致。

数值类型

Oracle数据类型 GaussDB语法是否支持 GaussDB功能是否支持 差异说明
NUMBER [ ( p [ , s ] ) ] 支持 满足 1、oracle 标度s允许小于0,这时可以存储为科学计数法;GaussDB的标度s取值范围[0,p]
2、oracle的精度p最大为38位;GaussDB的精度位数为1000精度p取值范围为[1,1000]
FLOAT [ ( p ) ] 支持 满足 1、在Oracle中FLOAT [ ( p ) ]是具有精度p的NUMBER数据类型的子类型。FLOAT值在内部表示为NUMBER。精度p的取值范围是1到126位二进制数字。FLOAT值需要1 ~ 22个字节。 GaussDB中根据精度p不同选择REAL或DOUBLE PRECISION作为内部表示,存储空间同样需要4字节或8字节。如不指定精度,内部用DOUBLE PRECISION表示,精度p取值范围为[1,53]。
LONG 不支持 部分满足 建议可以用TEXR字段类型替换,字段存储最大不超过1G
BINARY_FLOAT 不支持 满足 1、Oracle是32位单精度浮点数数据类型,范围为1.17549E-38F3.40282E+38F;GaussDB也是32位双精度浮点数数据类型,范围为-3.402E+383.402E+38,6位十进制数字精度
2、 GaussDB中可用REAL,FLOAT4替换
BINARY_DOUBLE 支持 满足 1、Oracle的BINARY_DOUBLE是64位双精度浮点数数据类型,范围为2.22507485850720E-3081.79769313486231E+308;GaussDB也是64位双精度浮点数数据类型,范围为-1.79E+3081.79E+308,15位十进制数字精度

日期时间类型

Oracle数据类型 GaussDB是否支持语法 GaussDB功能是否满足 差异(GaussDB)
DATE 支持 满足 1、Oracle的DATE类型包括日期和时间值;GaussDB默认是只包含日期
2、当在创建数据库的时把数据库兼容模式设置为Oracle,则功能一致;否则精度有差异,GaussDB不保存时间值
TIMESTAMP[ ( fractional_seconds_precision ) ] 支持 满足 1、Oracle的fractional_seconds_precision是second datetime字段小数部分的位数,fractional_seconds_precision取值范围为0 ~ 9。默认值是6。GaussDB的fractional_seconds_precision,取值范围为0~6
2、两者虽然存在差异,但是相差不大,可以理解为一致
TIMESTAMP[ ( fractional_seconds_precision ) ] WITH TIME ZONE 支持 不满足 GaussDB的timestamptz等价于Oracle的timestamp with loacl timezone的功能,缺少Oracle对应的timestamptz类型对应功能
TIMESTAMP[ ( fractional_seconds_precision ) ] WITH LOCAL TIME ZONE 不支持 满足 GaussDB的timestamptz等价于Oracle的timestamp with loacl timezone的功能,但是不支持timestamp with loacl timezone语法创建,需要通过timestamp with timezone来创建
INTERVAL YEAR[ ( year_precision ) ] TO MONTH 支持 满足 1、Oracle中以年和月为单位存储一段时间,其中year_precision是YEAR datetime字段中的位数。取值范围为0 ~ 9。默认值是2。
2、GaussDB 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 ) ] 支持 满足 1、Oracle中以天、小时、分和秒为单位存储一段时间,其中day_precision是DAY datetime字段的最大位数。取值范围为0 ~ 9。默认值是2。fractional_seconds_precision是SECOND字段小数部分的位数。取值范围为0 ~ 9,默认值是6
2、GaussDB中时间间隔,X天X小时X分X秒。day_precision:天数的精度,取值范围为06。兼容性考虑,目前未实现具体功能。fractional_seconds_precision:秒数的精度,取值范围为06。小数末尾的零不显示

字符类型

Oracle数据类型 GaussDB是否支持语法 GaussDB功能是否满足 差异(GaussDB)
VARCHAR2 ( size [ BYTE |CHAR ] ) 支持定义字节长度;不支持定义字符长度 部分满足 1、GaussDB不支持定义字符长度
2、GaussDB size单位为字节,最大10MB;Oracle默认最大长度为4000字符或字节;当MAX_STRING_SIZE =EXTENDED时,最大长度为 32767字节或字符
3、当字段定义长度为字符时,从Oracle迁移到GaussDB,需要考虑对该字段字符到字节长度的转换,具体需要考虑Oracle源数据库的字符集
NVARCHAR2 ( size ) 支持 部分满足 1、GaussDB不支持定义字符长度
2、GaussDB size单位为字节,最大10MB;Oracle默认长度为4000字符或字节;当MAX_STRING_SIZE =EXTENDED时,最大长度为 32767字节或字符
3、在从Oracle迁移到GaussDB,需要考虑对该字段字符到字节长度的转换,具体需要考虑Oracle源数据库的字符集
CHAR [ ( size [ BYTE |CHAR ] ) ] 支持定义字节长度;不支持定义字符长度 部分满足 1、GaussDB不支持定义字符长度
2、GaussDB size单位为字节,最大10MB;Oracle最大长度为2000字符或字节
3、当字段定义长度为字符时,从Oracle迁移到GaussDB,需要考虑对该字段字符到字节长度的转换,具体需要考虑Oracle源数据库的字符集
NCHAR [ ( size ) ] 支持 部分满足 1、GaussDB不支持定义字符长度
2、GaussDB size单位为字节,最大10MB;Oracle最大长度为2000字符或字节;
3、在从Oracle迁移到GaussDB,需要考虑对该字段字符到字节长度的转换,具体需要考虑Oracle源数据库的字符集
CLOB 支持 部分满足 1、GaussDB不支持定位器概念
2、Oracle字段存储最大上限4g(如果修改数据块的大小,可存储上限会增大),GaussDB最大支持1g
NCLOB 不支持 - -

二进制类型

Oracle数据类型 GaussDB是否支持语法 GaussDB功能是否满足 差异(GaussDB)
RAW ( size ) 支持 满足 oracle的MAX_STRING_SIZE = STANDARD,最大为为2000字节;MAX_STRING_SIZE = EXTENDED,最大为32767字节。GaussDB最大为1073733621字节
LONG RAW 不支持 - -
BLOB 支持 部分满足 1、GaussDB不支持定位器概念
2、Oracle字段存储最大上限4g(如果修改数据块的大小,可存储上限会增大),GaussDB最大支持1g
BFILE 不支持 - -

ROWID类型

Oracle数据类型 GaussDB是否支持语法 差异(GaussDB)
ROWID 不支持 -
UROWID 不支持 -

用户自定义类型

Oracle数据类型 GaussDB是否支持语法 GaussDB功能是否满足 差异(GaussDB)
对象类型 不支持 部分满足 只验证了基础建表设置该类型,其他功能未验证,当前只标记为部分满足
REF数据类型 不支持 - -
Varrays 不支持 - Varrays不支持,但是在PLSQL中支持该类型
嵌套表 支持 部分满足 只验证了基础建表设置该类型,其他功能未验证,当前只标记为部分满足

伪类型

Oracle数据类型 GaussDB是否支持语法 差异(GaussDB)
anytype 不支持 -
anydata 不支持 -
anydataset 不支持 -

xml类型

Oracle数据类型 GaussDB是否支持语法 GaussDB功能是否满足 差异(GaussDB)
XMLType 支持 部分满足 GaussDB不支持操作如下:

逻辑表达式and、or、not。
作为非XMLTYPE操作函数的系统函数的入参。
作为分布键、分区键、二级分区键、外键、主键、唯一约束。
XMLTYPE相关的隐式类型转换,包括字符串和XMLTYPE类型之间的隐式转换。
数组表达式、行表达式、子查询表达式、TABLE OF和TABLE OF INDEX。
使用XMLTYPE数据格式列做为普通索引、unique索引、global索引、local索引、部分索引。
比较表达式>、<、>=、<=、=、<>、!=、^=、between and、is distinct from、is not distinct from、<=>。
条件表达式decode、nullif、greatest、least。
作为distinct/group by/order by 参数。
聚合函数sum、max、min、avg、list_agg、corr、covar_pop、cover_samp、stddev、stddev_pop、stddev_samp、var_pop、var_samp、variance、bit_and、bit_or、bool_and、bool_or、every、regr_avgx、regr_avgy、regr_count、regr_intercept、regr_r2、regr_slope、regr_sxx、regr_sxy、regr_syy、rank、spread。
不支持ODBC相关绑定传参接口。
URIType 不支持 - -

空间类型

Oracle数据类型 GaussDB是否支持语法 差异(GaussDB)
SDO_GEOMETRY 不支持 -
SDO_TOPO_GEOMETRY 不支持 -
SDO_GEORASTER 不支持 -

总结

总之,GaussDB数据库Oracle兼容模式下,能够做到支持绝大部应用开发使用,虽然在数据类型兼容方面仍然存在个别功能差异,但是对当下Oracle到GaussDB整体项目的迁移影响还是有限。另外本文的所有内容参考gaussdb的官网文档整理。
– / END / –

可以通过下面的方式联系我

  • 微信公众号:@墨竹札记
  • 墨天轮:@墨竹
  • 微信:wshf395062788
  • PGFans:@墨竹

如果这篇文章为你带来了灵感或启发,就请帮忙点赞收藏转发;如果文章中不严谨或者错漏之处,请及时评论指正。非常感谢!

最后修改时间:2025-02-06 10:48:59
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论