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

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整体项目的迁移影响还是有限。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/bigdata/317075.html

(0)
上一篇 2025年11月1日 15:37
下一篇 2小时前

相关推荐

发表回复

登录后才能评论