更新时间:2024-12-04 GMT+08:00
分享

数据类型

表1 数值类型

序号

Oracle数据库

GaussDB数据库

差异

1

NUMBER [ ( p [ , s ] ) ]

支持,有差异

精度和用法存在差异。

  • NUMBER带参数时,GaussDB的精度p与标度s的最大边界值比Oracle更大。
  • NUMBER不带参数时,GaussDB的精度p的默认值远大于带参数时的最大边界值;而在Oracle中,精度p的默认值等于带参数时的最大边界值。
  • GaussDB不支持标度s为负值;在Oracle中,标度s为负值时会精确到相应的整数位。

2

FLOAT [ ( p ) ]

支持

-

3

BINARY_FLOAT

不支持

-

4

BINARY_DOUBLE

支持

-

表2 日期时间类型

序号

Oracle数据库

GaussDB数据库

差异

1

DATE

支持,有差异

精度有差异,GaussDB支持的公元时间较Oracle范围更大。

2

TIMESTAMP [ ( fractional_seconds_precision ) ]

支持,有差异

-

3

TIMESTAMP [ ( fractional_seconds_precision ) ] WITH TIME ZONE

支持,有差异

GaussDB的timestamptz等价于Oracle的timestampwithlocaltimezone,缺少Oracle对应的timestamptz类型。

时区更新:部分国家或地区经常会更新时区信息, 数据库系统因此需要同步修改时区文件以确保时间内容的正确性。

GaussDB时区类型目前只涉及timestamp with timezone,当新的时区文件生效时,不会对已有的数据进行变更,新数据会随时区文件信息进行同步调整。与Oracle的同类型数据能力存在差异。

4

TIMESTAMP [ ( fractional_seconds_precision ) ] WITH LOCAL TIME ZONE

不支持

-

5

INTERVAL YEAR [ ( year_precision ) ] TO MONTH

支持

-

6

INTERVAL DAY [ ( day_precision ) ] TO SECOND [ ( fractional_seconds_precision ) ]

支持

-

  • A兼容模式下,DATE类型被替换为TIMESTAMP(0) WITHOUT TIME ZONE,差异同TIMESTAMP(0) WITHOUT TIME ZONE。
  • 对于TIMESTAMP [ ( fractional_seconds_precision ) ] / TIMESTAMP [ ( fractional_seconds_precision ) ] WITH TIME ZONE与Oracle存在以下差异。
    • fractional_seconds_precision GaussDB支持的精度范围为0~6,Oracle支持的精度范围为0~9。
    • GaussDB通过DateStyle设置日期和时间值的显示格式,以及有歧义的输入值的解析规则。具体请参见《开发指南》中“SQL参考 > 数据类型 > 日期/时间类型”章节中日期输入的说明介绍。Oracle在一般情况下的输入格式校验及输出显示由NLS_TIMESTAMP_FORMAT/NLS_TIMESTAMP_TZ_FORMAT参数进行控制。
    • 对于秒的小数部分的显示,GaussDB默认去除末尾的零,Oracle依据格式化参数中的设置(FF/FF1-FF9)进行显示控制。如 '2017-09-01 10:32:19.212000',GaussDB显示为 '2017-09-01 10:32:19.212',Oracle在format参数中含FF时显示为'2017-09-01 10:32:19.212000',在format参数中含FF9时显示为'2017-09-01 10:32:19.212000000'。
    • 支持的时间范围存在差异,GaussDB支持的公元时间较Oracle范围更大。
表3 字符类型

序号

Oracle数据库

GaussDB数据库

差异

1

VARCHAR2 ( size [ BYTE | CHAR ] )

支持,有差异

在GaussDB中,size单位为字节,即仅支持BYTE,不支持在BYTE和CHAR之间选择,最大10MB;而在Oracle中,size的单位可以在BYTE和CHAR之间选择,MAX_STRING_SIZE=EXTENDED时,最大长度为32767字节,MAX_STRING_SIZE=STANDARD时,最大长度为4000字节,实际能容纳的字符数与使用的字符集有关。

2

NVARCHAR2 ( size )

支持,有差异

在GaussDB中,NVARCHAR2(n)类型是VARCHAR2(n)类型的别名;而在Oracle中NVARCHAR2(n)与VARCHAR2(n)有一定的区别,MAX_STRING_SIZE=EXTENDED时,最大长度为32767字节,MAX_STRING_SIZE=STANDARD时,最大长度为4000字节,实际能容纳的字符数与使用的字符集有关。

3

CHAR [ ( size [ BYTE | CHAR ] ) ]

支持,有差异

在GaussDB中,size单位为字节,即仅支持BYTE,不支持在BYTE和CHAR之间选择,最大10MB;而在Oracle中,size的单位可以在BYTE和CHAR之间选择,最大容量为2000个字节,实际能容纳的字符数与使用的字符集有关。

4

NCHAR [ ( size ) ]

支持,有差异

在GaussDB中,size单位为字节,最大10MB;而在Oracle中,size单位为字符,最大容量为2000个字节,实际能容纳的字符数与使用的字符集有关。

5

CLOB

支持,有差异

不支持定位器。

6

NCLOB

不支持

-

7

LONG

不支持

-

表4 二进制类型

序号

Oracle数据库

GaussDB数据库

差异

1

RAW ( size )

支持,有差异

在GaussDB中,size是指字节长度建议值,不会用于校验输入raw类型的字节长度。

2

LONG RAW

不支持

-

3

BLOB

支持

-

4

BFILE

不支持

-

表5 ROWID类型

序号

Oracle数据库

GaussDB数据库

1

ROWID

不支持

2

UROWID

不支持

表6 用户自定义类型

序号

Oracle数据库

GaussDB数据库

1

对象类型

不支持

2

REF数据类型

不支持

3

可变数组

支持

4

嵌套表

支持

表7 伪类型

序号

Oracle数据库

GaussDB数据库

1

anytype

不支持

2

anydata

不支持

3

anydataset

不支持

表8 xml类型

序号

Oracle数据库

GaussDB数据库

差异

1

XMLTYPE

支持,有差异

在GaussDB中,不支持部分操作,如不能通过使用XMLELEMENT函数将字符串转变为XMLTYPE类型,而是转变成XML类型。具体请参见《开发指南》中“SQL参考 > 数据类型 > XMLTYPE类型”章节。

2

URIType

不支持

-

表9 空间类型

序号

Oracle数据库

GaussDB数据库

1

SDO_GEOMETRY

不支持

2

SDO_TOPO_GEOMETRY

不支持

3

SDO_GEORASTER

不支持

表10 锁模式

序号

Oracle数据库

GaussDB数据库

1

none

-

2

null

AccessShare

3

RS

RowShare

4

RX

RowExclusive

5

S

ShareUpdateExclusive

6

SRX

Share

7

-

ShareRowExclusive

8

X

Exclusive

9

-

AccessExclusive

10

-

INVALID

说明:

GaussDB的INVALID表示被赋予了非法锁。仅在运行过程中出现了GaussDB无法识别的锁时会被赋予INVALID锁。

相关文档