云数据库 GaussDB
产品介绍
文档版本 01
发布日期 2024-08-28
华为云计算技术有限公司
版权所有 © 华为云计算技术有限公司 2024 保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传
播。
商标声明
和其他华为商标均为华为技术有限公司的商标。
本文档提及的其他所有商标或注册商标,由各自的所有人拥有。
注意
您购买的产品、服务或特性等应受华为云计算技术有限公司商业合同和条款的约束,本文档中描述的全部或部
分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,华为云计算技术有限公司对本文
档内容不做任何明示或暗示的声明或保证。
由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文
档中的所有陈述、信息和建议不构成任何明示或暗示的担保。
华为云计算技术有限公司
地址: 贵州省贵安新区黔中大道交兴功路华为云数据中心 邮编:550029
网址: https://www.huaweicloud.com/
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 i
1 什么是云数据库 GaussDB......................................................................................................... 1
2 应用场景......................................................................................................................................4
3 常用概念......................................................................................................................................5
4 产品优势......................................................................................................................................7
5 实例说明......................................................................................................................................8
5.1 数据库实例类型.........................................................................................................................................................................8
5.2 数据库实例存储类型............................................................................................................................................................. 14
5.3 数据库引擎版本说明............................................................................................................................................................. 14
5.4 数据库实例状态...................................................................................................................................................................... 15
6 数据库实例规格........................................................................................................................ 18
7 Oracle 兼容性说明..............................................................................................................27
7.1 分布式........................................................................................................................................................................................27
7.1.1 Oracle 数据库兼容性概述.................................................................................................................................................27
7.1.2 SQL 的基本元素.................................................................................................................................................................. 27
7.1.2.1 数据类型............................................................................................................................................................................ 28
7.1.2.2 数据类型比较规则........................................................................................................................................................... 33
7.1.2.3 字面量.................................................................................................................................................................................35
7.1.2.4 格式模型............................................................................................................................................................................ 35
7.1.2.5 空值..................................................................................................................................................................................... 36
7.1.2.6 注释..................................................................................................................................................................................... 36
7.1.2.7 数据库对象........................................................................................................................................................................ 37
7.1.2.8 数据库对象名称和限定符.............................................................................................................................................. 39
7.1.2.9 SQL 语句中的引用架构对象和部件的语法............................................................................................................... 39
7.1.3 伪列........................................................................................................................................................................................ 39
7.1.4 操作符.................................................................................................................................................................................... 40
7.1.5 表达式.................................................................................................................................................................................... 42
7.1.6 条件........................................................................................................................................................................................ 44
7.1.7 常见的 SQL DDL 子句....................................................................................................................................................... 45
7.1.8 SQL 查询和子查询.............................................................................................................................................................. 52
7.1.9 PL/SQL 语言......................................................................................................................................................................... 53
7.1.9.1 PL/SQL 基本语法............................................................................................................................................................. 53
云数据库 GaussDB
产品介绍
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 ii
7.1.9.2 数据类型兼容性............................................................................................................................................................... 56
7.1.9.3 控制语句............................................................................................................................................................................ 56
7.1.9.4 集合和 Record.................................................................................................................................................................. 58
7.1.9.5 静态 SQL............................................................................................................................................................................ 64
7.1.9.6 动态 SQL............................................................................................................................................................................ 67
7.1.9.7 Trigger................................................................................................................................................................................ 67
7.1.10 系统函数............................................................................................................................................................................. 75
7.1.10.1 单行函数.......................................................................................................................................................................... 75
7.1.10.2 其它函数.......................................................................................................................................................................... 91
7.1.11 系统视图............................................................................................................................................................................. 93
7.1.12 高级包............................................................................................................................................................................... 100
7.2 主备版..................................................................................................................................................................................... 153
7.2.1 Oracle 数据库兼容性概述.............................................................................................................................................. 153
7.2.2 SQL 的基本元素................................................................................................................................................................ 153
7.2.2.1 数据类型.......................................................................................................................................................................... 154
7.2.2.2 数据类型比较规则.........................................................................................................................................................159
7.2.2.3 字面量.............................................................................................................................................................................. 161
7.2.2.4 格式模型.......................................................................................................................................................................... 162
7.2.2.5 空值...................................................................................................................................................................................162
7.2.2.6 注释...................................................................................................................................................................................163
7.2.2.7 数据库对象......................................................................................................................................................................163
7.2.2.8 数据库对象名称和限定符............................................................................................................................................165
7.2.2.9 SQL 语句中的引用架构对象和部件的语法.............................................................................................................165
7.2.3 伪列...................................................................................................................................................................................... 166
7.2.4 操作符..................................................................................................................................................................................166
7.2.5 表达式..................................................................................................................................................................................169
7.2.6 条件...................................................................................................................................................................................... 171
7.2.7 常见的 SQL DDL 子句..................................................................................................................................................... 172
7.2.8 SQL 查询和子查询............................................................................................................................................................180
7.2.9 PL/SQL 语言.......................................................................................................................................................................181
7.2.9.1 PL/SQL 基本语法...........................................................................................................................................................181
7.2.9.2 数据类型兼容性............................................................................................................................................................. 184
7.2.9.3 控制语句.......................................................................................................................................................................... 185
7.2.9.4 集合和 Record................................................................................................................................................................187
7.2.9.5 静态 SQL..........................................................................................................................................................................193
7.2.9.6 动态 SQL..........................................................................................................................................................................196
7.2.9.7 Trigger..............................................................................................................................................................................196
7.2.10 系统函数........................................................................................................................................................................... 205
7.2.10.1 单行函数....................................................................................................................................................................... 205
7.2.10.2 其它函数....................................................................................................................................................................... 224
7.2.11 系统视图........................................................................................................................................................................... 226
7.2.12 高级包............................................................................................................................................................................... 233
云数据库 GaussDB
产品介绍
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 iii
8 MySQL 兼容性说明...........................................................................................................290
8.1 分布式..................................................................................................................................................................................... 290
8.1.1 MySQL 数据库兼容 MySQL 模式.................................................................................................................................290
8.1.1.1 MySQL 数据库兼容性概述......................................................................................................................................... 290
8.1.1.2 数据类型.......................................................................................................................................................................... 290
8.1.1.2.1 数值数据类型..............................................................................................................................................................291
8.1.1.2.2 日期与时间数据类型.................................................................................................................................................297
8.1.1.2.3 字符串数据类型......................................................................................................................................................... 308
8.1.1.2.4 二进制数据类型......................................................................................................................................................... 311
8.1.1.2.5 JSON 数据类型........................................................................................................................................................... 312
8.1.1.2.6 数据类型支持的属性.................................................................................................................................................313
8.1.1.2.7 数据类型转换..............................................................................................................................................................313
8.1.1.3 系统函数.......................................................................................................................................................................... 315
8.1.1.3.1 流量控制函数..............................................................................................................................................................316
8.1.1.3.2 日期和时间函数......................................................................................................................................................... 318
8.1.1.3.3 字符串函数.................................................................................................................................................................. 328
8.1.1.3.4 强制转换函数..............................................................................................................................................................332
8.1.1.3.5 加密函数...................................................................................................................................................................... 333
8.1.1.3.6 JSON 函数....................................................................................................................................................................333
8.1.1.3.7 聚合函数...................................................................................................................................................................... 335
8.1.1.3.8 数字操作函数..............................................................................................................................................................337
8.1.1.3.9 其他函数...................................................................................................................................................................... 338
8.1.1.4 操作符.............................................................................................................................................................................. 338
8.1.1.5 字符集.............................................................................................................................................................................. 340
8.1.1.6 排序规则.......................................................................................................................................................................... 340
8.1.1.7 SQL................................................................................................................................................................................... 341
8.1.1.7.1 DDL............................................................................................................................................................................... 341
8.1.1.7.2 DML.............................................................................................................................................................................. 348
8.1.1.7.3 DCL................................................................................................................................................................................ 359
8.1.1.8 驱动...................................................................................................................................................................................359
8.1.1.8.1 JDBC.............................................................................................................................................................................. 359
8.1.1.8.1.1 JDBC 接口参考........................................................................................................................................................ 359
8.2 主备版..................................................................................................................................................................................... 360
8.2.1 概述...................................................................................................................................................................................... 360
8.2.2 MySQL 数据库兼容性 B 模式........................................................................................................................................ 360
8.2.2.1 MySQL 数据库兼容性概述......................................................................................................................................... 360
8.2.2.2 数据类型.......................................................................................................................................................................... 360
8.2.2.2.1 数值数据类型..............................................................................................................................................................361
8.2.2.2.2 日期与时间数据类型.................................................................................................................................................367
8.2.2.2.3 字符串数据类型......................................................................................................................................................... 378
8.2.2.2.4 二进制数据类型......................................................................................................................................................... 381
8.2.2.2.5 JSON 数据类型........................................................................................................................................................... 382
云数据库 GaussDB
产品介绍
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 iv
8.2.2.2.6 数据类型支持的属性.................................................................................................................................................383
8.2.2.2.7 数据类型转换..............................................................................................................................................................383
8.2.2.3 系统函数.......................................................................................................................................................................... 385
8.2.2.3.1 流量控制函数..............................................................................................................................................................386
8.2.2.3.2 日期和时间函数......................................................................................................................................................... 388
8.2.2.3.3 字符串函数.................................................................................................................................................................. 398
8.2.2.3.4 强制转换函数..............................................................................................................................................................404
8.2.2.3.5 加密函数...................................................................................................................................................................... 405
8.2.2.3.6 信息函数...................................................................................................................................................................... 405
8.2.2.3.7 JSON 函数....................................................................................................................................................................405
8.2.2.3.8 聚合函数...................................................................................................................................................................... 407
8.2.2.3.9 数字操作函数..............................................................................................................................................................408
8.2.2.3.10 其他函数.................................................................................................................................................................... 409
8.2.2.4 操作符.............................................................................................................................................................................. 409
8.2.2.5 字符集.............................................................................................................................................................................. 411
8.2.2.6 排序规则.......................................................................................................................................................................... 411
8.2.2.7 表达式.............................................................................................................................................................................. 412
8.2.2.8 SQL................................................................................................................................................................................... 412
8.2.2.8.1 DDL............................................................................................................................................................................... 412
8.2.2.8.2 DML.............................................................................................................................................................................. 421
8.2.2.8.3 DCL................................................................................................................................................................................ 432
8.2.2.9 驱动...................................................................................................................................................................................432
8.2.2.9.1 JDBC.............................................................................................................................................................................. 432
8.2.2.9.1.1 JDBC 接口参考........................................................................................................................................................ 433
8.2.3 MySQL 数据库兼容性 M-Compatibility 模式...........................................................................................................433
8.2.3.1 MySQL 数据库兼容性概述......................................................................................................................................... 433
8.2.3.2 数据类型.......................................................................................................................................................................... 434
8.2.3.2.1 数值数据类型..............................................................................................................................................................435
8.2.3.2.2 日期与时间数据类型.................................................................................................................................................437
8.2.3.2.3 字符串数据类型......................................................................................................................................................... 438
8.2.3.2.4 二进制数据类型......................................................................................................................................................... 441
8.2.3.2.5 数据类型支持的属性.................................................................................................................................................444
8.2.3.2.6 数据类型转换..............................................................................................................................................................444
8.2.3.3 系统函数.......................................................................................................................................................................... 449
8.2.3.3.1 流程控制函数..............................................................................................................................................................450
8.2.3.3.2 日期和时间函数......................................................................................................................................................... 450
8.2.3.3.3 字符串函数.................................................................................................................................................................. 455
8.2.3.3.4 强制转换函数..............................................................................................................................................................458
8.2.3.3.5 加密函数...................................................................................................................................................................... 459
8.2.3.3.6 比较函数...................................................................................................................................................................... 459
8.2.3.3.7 聚合函数...................................................................................................................................................................... 461
8.2.3.3.8 数字操作函数..............................................................................................................................................................462
云数据库 GaussDB
产品介绍
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 v
8.2.3.3.9 其他函数...................................................................................................................................................................... 463
8.2.3.4 操作符.............................................................................................................................................................................. 463
8.2.3.5 字符集.............................................................................................................................................................................. 472
8.2.3.6 排序规则.......................................................................................................................................................................... 473
8.2.3.7 事务...................................................................................................................................................................................474
8.2.3.8 SQL................................................................................................................................................................................... 477
8.2.3.8.1 关键字...........................................................................................................................................................................478
8.2.3.8.2 标识符...........................................................................................................................................................................478
8.2.3.8.3 DDL............................................................................................................................................................................... 480
8.2.3.8.4 DML.............................................................................................................................................................................. 494
8.2.3.8.5 DCL................................................................................................................................................................................ 502
8.2.3.8.6 其它语句...................................................................................................................................................................... 502
8.2.3.8.7 用户与权限.................................................................................................................................................................. 503
8.2.3.8.8 系统表和系统视图..................................................................................................................................................... 509
9 安全......................................................................................................................................... 513
9.1 责任共担.................................................................................................................................................................................513
9.2 身份认证与访问控制........................................................................................................................................................... 514
9.2.1 服务的访问控制................................................................................................................................................................ 514
9.3 数据保护技术........................................................................................................................................................................ 515
9.4 审计与日志............................................................................................................................................................................ 515
9.5 监控安全风险........................................................................................................................................................................ 516
9.6 故障恢复.................................................................................................................................................................................516
9.7 认证证书.................................................................................................................................................................................517
10 权限管理............................................................................................................................... 519
11 约束与限制........................................................................................................................... 525
12 GaussDB 与其他服务的关系.............................................................................................. 531
云数据库 GaussDB
产品介绍
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 vi
1 什么是云数据库 GaussDB
GaussDB是华为自主创新研发的分布式关系型数据库。该产品支持分布式事务,同城
AZ部署,数据0丢失,支持1000+的扩展能力,PB级海量存储。同时拥有云上高可
用,高可靠,高安全,弹性伸缩,一键部署,快速备份恢复,监控告警等关键能力,
能为企业提供功能全面,稳定可靠,扩展性强,性能优越的企业级数据库服务。
成长地图
您可以通过云数据库GaussDB成长地图快速了解GaussDB的相关概念、入门使用和高
手进阶等。
如何使用云数据库 GaussDB
您可以通过如下方式使用GaussDB
管理控制台:您可以使用管理控制台为您提供的Web界面完成GaussDB的相关操
作。
API:您可以编写代码调用API使用GaussDB,请参考《云数据库GaussDB API
考》
GaussDB 分布式形态整体架构
GaussDB分布式形态整体架构如下:
云数据库 GaussDB
产品介绍 1 什么是云数据库 GaussDB
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 1
1-1 GaussDB 分布式形态整体架构图
Coordinator Node:协调节点CN,负责接收来自应用的访问请求,并向客户端返
回执行结果;负责分解任务,并调度任务分片在各DN上并行执行。
GTM:全局事务管理器(Global Transaction Manager),负责生成和维护全局
事务ID、事务快照、时间戳、Sequence信息等全局唯一的信息。
Data Node:数据节点DN,负责存储业务数据、执行数据查询任务以及向CN
回执行结果。
GaussDB 主备版形态整体架构
GaussDB 主备版形态整体架构如下:
云数据库 GaussDB
产品介绍 1 什么是云数据库 GaussDB
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 2
1-2 GaussDB 主备版形态整体架构图
ETCD:分布式键值存储系统(Editable Text Conguration Daemon)。用于共
享配置和服务发现(服务注册和查找)。
CMS:集群管理模块(Cluster Manager)。管理和监控分布式系统中各个功能单
元和物理资源的运行情况,确保整个系统的稳定运行。
Data Node:数据节点DN,负责存储业务数据、执行数据查询任务以及返回执行
结果。
云数据库 GaussDB
产品介绍 1 什么是云数据库 GaussDB
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 3
2 应用场景
交易型应用
大并发、大数据量、以联机事务处理为主的交易型应用,如政务、金融、电商、
O2O、电信CRM/计费等,服务能力支持高扩展、弹性扩缩,应用可按需选择不同
的部署规模。
详单查询
具备PB级数据负载能力,通过内存分析技术满足海量数据边入库边查询要求,适
用于安全、电信、金融、物联网等行业的详单查询业务。
云数据库 GaussDB
产品介绍 2 应用场景
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 4
3 常用概念
实例
GaussDB的最小管理单元是实例,一个实例代表了一个独立运行的数据库。用户可以
在控制台创建和管理GaussDB实例。实例的状态、规格、存储类型和版本,请参考
例说明
数据库引擎版本
GaussDB目前支持3.2233.2268.102版本。
实例类型
GaussDB支持分布式版和主备版实例。
分布式形态能够支撑较大的数据量,且提供了横向扩展的能力,可以通过扩容的
方式提高实例的数据容量和并发能力。
主备版适用于数据量较小,且长期来看数据不会大幅度增长,但是对数据的可靠
性,以及业务的可用性有一定诉求的场景。
实例规格
数据库实例各种规格(vCPU个数、内存(GB))请参考数据库实例规格
CN
协调节点(Coordinator Node),负责接收来自应用的访问请求,并向客户端返回执
行结果;负责分解任务,并调度任务分片在各DN上并行执行。
DN
数据节点(Data Node),负责存储业务数据、执行数据查询任务以及向CN返回执行
结果。
自动备份
购买实例时,GaussDB服务默认开启自动备份策略,备份默认保留7天。实例创建成功
后,您可对其进行修改GaussDB服务会根据您设置的自动备份策略,自动创建数据
库实例的备份。
云数据库 GaussDB
产品介绍 3 常用概念
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 5
手动备份
手动备份是由用户启动的数据库实例的全量备份,它会一直保存,直到用户手动删
除。
区域和可用区
区域和可用区用来描述数据中心的位置,您可以在特定的区域、可用区创建资源。
区域(Region):从地理位置和网络时延维度划分,同一个Region内共享弹性计
算、块存储、对象存储、VPC网络、弹性公网IP、镜像等公共服务。Region分为
通用Region和专属Region,通用Region指面向公共租户提供通用云服务的
Region;专属Region指只承载同一类业务或只面向特定租户提供业务服务的专用
Region
可用区(AZAvailability Zone):一个AZ是一个或多个物理数据中心的集合,
有独立的风火水电,AZ内逻辑上再将计算、网络、存储等资源划分成多个实例。
一个Region中的多个AZ间通过高速光纤相连,以满足用户跨AZ构建高可用性系统
的需求。
3-1阐明了区域和可用区之间的关系。
3-1 区域和可用区
目前,华为云已在全球多个地域开放云服务,您可以根据需求选择适合自己的区域和
可用区。更多信息请参见华为云全球站点
项目
Project用于将OpenStack的资源(计算、存储和网络资源)进行分组和隔离。Project
可以是一个部门或者一个项目组。一个账户中可以创建多个Project
云数据库 GaussDB
产品介绍 3 常用概念
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 6
4 产品优势
高安全
GaussDB拥有TOP级的商业数据库安全特性,如下所示,能够满足政企和金融级
客户的核心安全诉求。
数据动态脱敏,行级访问控制,密态计算。
健全的工具与服务化能力
GaussDB已经拥有华为云,商用服务化部署能力,同时支持DASDRS等生态工
具。有效保障用户开发、运维、优化、监控、迁移等日常工作需要。
全栈自研
GaussDB基于鲲鹏生态,是当前国内唯一能够做到全栈自主可控的国产品牌。同
GaussDB能够基于硬件优势在底层不断进行优化,提升产品综合性能。
开源生态
GaussDB已经支持开源社区,并提供主备版版本下载。
云数据库 GaussDB
产品介绍 4 产品优势
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 7
5 实例说明
5.1 数据库实例类型
GaussDB的实例类型如1所示。
5-1 实例类型
支持的部署形态
是否支
持实例
扩容
适用场景
包含的
组件
业务处理流程
独立部署:将数据库组
件部署在不同节点上。
适用于可靠性、稳定性
要求较高,实例规模较
大的场景。
混合部署:采用一主两
备三节点的部署模式,
包含三个分片。
数据量较
大,对数据
容量和并发
能力有一定
诉求。
O
M
CM
GT
M
ETC
D
CN
DN
业务应用下发
SQLCN
CN利用数据库
的优化器生成
执行计划,下
发给DN,每个
DN会按照执行
计划的要求去
处理数据,处
理完成后DN
结果集返回给
CN进行汇总,
最后CN将汇总
后的结果返回
给业务应用。
云数据库 GaussDB
产品介绍 5 实例说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 8
支持的部署形态
是否支
持实例
扩容
适用场景
包含的
组件
业务处理流程
12:采用一主两备
三节点的部署模式,包
含一个分片。
单副本:采用单节点的
部署模式,仅包含一个
CMS和一个DN组件,不
适用于生产环境。单副
本实例仅支持2.2及以上
版本实例。由于部署在
单台机器上,因此无法
保障可用性(SLA)。
111日志:采用一
主一备一日志三节点的
部署模式,包含一个分
片。日志节点仅用于存
储日志,不产生费用,
可降低成本和资源消
耗。
数据量较
小,且长期
来看数据不
会大幅度增
长,但是对
数据的可靠
性,以及业
务的可用性
有一定诉
求。
O
M
CM
ETC
D
DN
业务应用直接
下发任务给
DN DN处理
完成后再将结
果返回给业务
应用。
OM:运维管理模块(Operation Manager)。提供集群日常运维、配置管理的管理接口、
工具。
CM:集群管理模块(Cluster Manager)。管理和监控分布式系统中各个功能单元和物理资
源的运行情况,确保整个系统的稳定运行。CM相当于一个机器管家,定期的收集和分析DN
的状态,判断DN当前是不是健康运行,一旦发现DN异常,它会尝试修复,例如把DN
启,或者把备DN升级成主DN
GTM:全局事务管理器(Global Transaction Manager),负责生成和维护全局事务ID、事
务快照、时间戳、sequence信息等全局唯一的信息。
ETCD:分布式键值存储系统(Editable Text Conguration Daemon)。用于共享配置和服
务发现(服务注册和查找)。我们主要用它来存一些元数据信息,比如每个DN的运行状态
就是存储在ETCD里,CM通过读取ETCD里面DN的状态来执行它的管理动作。
CN:协调节点(Coordinator Node)。负责接收来自应用的访问请求,并向客户端返回执
行结果;负责分解任务,并调度任务分片在各DN上并行执行。每个CN与每个DN相连接,所
CN共享一份元数据。
DN:数据节点(Data Node)。负责存储业务数据、执行数据查询任务以及返回执行结果。
分布式版
GaussDB分布式版逻辑架构图如下:
云数据库 GaussDB
产品介绍 5 实例说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 9
5-1 分布式版逻辑架构图
分布式实例支持的部署形态:
独立部署
独立部署模式下,是将数据库每个组件独立部署在不同的服务器上,即每个CN
DN占用一个VM,互相之间资源隔离。以默认配置(3CN3副本,3分片)为
例,独立部署模式有3CN9DN,总计12个节点,因此独立部署费用也会相
对较高。架构图如5-2所示。独立部署形态适用于可靠性、稳定性要求较高,实
例规模较大的场景。
云数据库 GaussDB
产品介绍 5 实例说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 10
5-2 独立部署架构图
混合部署
混合部署模式下,是将数据库多个组件部署在同一个服务器上,以默认配置
3CN3DN)为例,一个CN和三个DN共同占用一个VM,共3个节点。架构图
5-3所示。仅基础版分布式可选。基础版相对于企业版有较低的价格,适合对
性能要求不高、对成本敏感的用户。
云数据库 GaussDB
产品介绍 5 实例说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 11
5-3 混合部署架构图
主备版
GaussDB主备版逻辑架构图如下:
5-4 主备版逻辑架构图
主备版实例支持的部署形态:
12
12备采用一主两备三节点的部署模式,包含一个分片,架构图如5-5所示。仅
主备版实例可选。该形态不具备可扩展性。适用于数据量较小,且长期来看数据
不会大幅度增长,但是对数据的可靠性,以及业务的可用性有一定诉求的场景。
云数据库 GaussDB
产品介绍 5 实例说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 12
DN主备任意一个节点故障部署,不影响业务的进行。
支持3副本,单 AZ3副本,3 AZ两种部署方式。
5-5 1 2 备架构图
111日志
采用一主一备一日志三节点的部署模式,包含一个分片,三个副本。仅主备版实
例可选。架构图如5-6所示。
5-6 1 1 1 日志架构图
单副本
采用单节点的部署模式,仅包含一个CMS和一个DN组件。仅主备版实例可选。架
构图如5-7所示。
云数据库 GaussDB
产品介绍 5 实例说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 13
5-7 单副本架构图
5.2 数据库实例存储类型
数据库系统通常是IT系统最为重要的系统,对存储IO性能要求高,GaussDB支持“超
IO”和“极速型SSD”存储类型。
超高IO:超高性能云硬盘,可用于企业关键性业务,适合高吞吐、低时延的工作
负载。最大吞吐量为800MB/S
极速型SSD:适用于需要超大带宽和超低时延的场景。最大吞吐量为2500MB/S
极速型SSD存储类型仅针对特定用户开放,如需配置白名单权限,您可以在管理控制台右上角,
选择“工单 > 新建工单”,提交开通白名单的申请。
5.3 数据库引擎版本说明
GaussDB 数据库引擎版本号说明
GaussDB采用点分式版本号。格式为:A.BCD。其中:
A”:表示大版本,该版本一般会有架构升级和较大的新特性发布。
BCD”:首位(B)代表大的新特性发布版本,第二位(C)和第三位(D)代
表迭代计划内含有重要的更新和提升。
GaussDB 数据库和内核引擎版本对应关系
GaussDB版本的对应关系如5-2所示。
GaussDB数据库引擎版本和内核引擎版本查询方法请参考查看云数据库GaussDB数据
库和内核引擎版本
云数据库 GaussDB
产品介绍 5 实例说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 14
5-2 GaussDB 数据库和内核引擎版本对应关系
GaussDB数据库引擎版本 GaussDB内核引擎版本
8.102.0 505.1.0
3.226.0 503.1.0.SPC2300
3.223.0 503.1.0.SPC2000
3.222.0 503.1.0.SPC1700
3.220.0 503.1.0.SPC1500
3.208.0 503.1.0.SPC1200
3.207.0 503.1.0.SPC1100
3.201.0 503.1.0.SPC0200
查看云数据库 GaussDB 数据库和内核引擎版本
1. 登录管理控制台
2. 单击管理控制台左上角的 ,选择区域和项目。
3. 在页面左上角单击 ,选择“数据库 > 云数据库 GaussDB”,进入云数据库
GaussDB信息页面。
4. 在“实例管理”页面,选择指定的实例,单击实例名称,进入基本信息页面。
5. 在实例“基本信息”页面,“配置信息”模块的“数据库引擎版本”和“内核引
擎版本”处查看数据库实例和内核的版本号。
5-8 基本信息
5.4 数据库实例状态
数据库实例状态
数据库实例状态是数据库实例的运行情况。用户可以使用管理控制台和API操作查看数
据库实例状态。
云数据库 GaussDB
产品介绍 5 实例说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 15
5-3 状态及说明
状态 说明
正常 数据库实例正常和可用。
异常 数据库实例不可用。
创建中 正在创建数据库实例。
创建失败 数据库实例创建失败。
重启中 数据库实例重启中。
启动中 数据库实例启动中。
节点启动中 数据库实例节点启动中。
停止中 数据库实例停止中。
节点停止中 数据库实例节点停止中。
已停止 数据库实例/节点已停止。
扩容中 数据库实例磁盘扩容中。
添加节点中 数据库实例节点扩容中。
备份中 正在备份数据库实例。
恢复中 正在恢复备份到实例中。
恢复失败 实例恢复失败。
冻结 账户余额小于或等于0元,系统对该用户下的实例进行冻结。
您需前往费用中心充值成功,欠款核销后,冻结的实例才会解
冻。
存储空间满
实例的磁盘空间已满,此时不可进行数据库写入操作,您需要
扩容磁盘使实例恢复到正常状态。
已删除 数据库实例已被删除,对于已经删除的实例,将不会在实例列
表中显示。
版本升级中 实例版本正在升级中。
参数变更,等待重
数据库参数修改后,有些参数修改,需等待用户重启实例才能
生效。
变更副本中 数据库实例正在执行降副本操作。
云数据库 GaussDB
产品介绍 5 实例说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 16
备份状态
5-4 备份状态及说明
状态
说明
备份完成 表明备份任务执行成功。
备份失败 表明备份任务执行失败。
备份中 表明正在进行备份中。
云数据库 GaussDB
产品介绍 5 实例说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 17
6 数据库实例规格
GaussDB的实例规格CPU架构分为X86架构和ARM架构,不同架构支持的区域请参见
6-1,支持的规格列表请参见6-2
X86架构:独享型(1:4)、独享型(1:8)、通用型(1:4
ARM架构:鲲鹏独享型(1:4)、鲲鹏独享型(1:8
6-1 支持的区域
产品类
实例类
规格类型 计费模式 区域
企业版 分布式
独享型
1:4
独享型
1:8
鲲鹏独享型
1:4
按需/包年
包月
华北-北京二
华东-上海二
中东-利雅得
华南-广州友好用户环境
华南-深圳
土耳其-伊斯坦布尔
非洲-约翰内斯堡
拉美-圣保罗一
亚太-曼谷
亚太-雅加达
拉美-墨西哥城二
中国-香港
拉美-圣地亚哥
华东-上海一
华南-广州
西南-贵阳一
亚太-新加坡
华北-北京四
华为云政务平台-乌兰察布
华东二
云数据库 GaussDB
产品介绍 6 数据库实例规格
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 18
产品类
实例类
规格类型 计费模式 区域
鲲鹏独享型
1:8
按需 华北-北京二
华东-上海二
华南-广州友好用户环境
华南-深圳
土耳其-伊斯坦布尔
亚太-雅加达
中国-香港
华东-上海一
华南-广州
西南-贵阳一
亚太-新加坡
华北-北京四
华为云政务平台-乌兰察布
华东二
包年包月 华北-北京二
华东-上海二
华南-广州友好用户环境
华南-深圳
亚太-雅加达
中国-香港
华东-上海一
华南-广州
西南-贵阳一
亚太-新加坡
华北-北京四
华为云政务平台-乌兰察布
华东二
云数据库 GaussDB
产品介绍 6 数据库实例规格
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 19
产品类
实例类
规格类型 计费模式 区域
主备版
独享型
1:4
独享型
1:8
鲲鹏独享型
1:4
鲲鹏独享型
1:8
按需/包年
包月
华北-北京二
华东-上海二
中东-利雅得
华南-广州
华东-上海一
华北-北京四
西南-贵阳一
华南-广州友好用户环境
拉美-墨西哥城二
亚太-新加坡
亚太-曼谷
拉美-圣保罗一
非洲-约翰内斯堡
土耳其-伊斯坦布尔
中国-香港
拉美-圣地亚哥
亚太-雅加达
华东二
基础版
分布式
独享型
1:4
独享型
1:8
鲲鹏独享型
1:4
按需/包年
包月
华东-上海二
中东-利雅得
华北-北京四
华南-广州友好用户环境
华东-上海一
华南-广州
西南-贵阳一
非洲-约翰内斯堡
拉美-圣保罗一
中国-香港
拉美-圣地亚哥
亚太-雅加达
亚太-曼谷
拉美-墨西哥城二
土耳其-伊斯坦布尔
亚太-新加坡
华东二
云数据库 GaussDB
产品介绍 6 数据库实例规格
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 20
产品类
实例类
规格类型 计费模式 区域
鲲鹏独享型
1:8
按需/包年
包月
华东-上海二
华南-广州友好用户环境
华南-广州
华北-北京四
华东-上海一
西南-贵阳一
华东二
主备版
通用型
1:4
独享型
1:4
独享型
1:8
鲲鹏独享型
1:4
按需/包年
包月
华北-北京二
华东-上海二
中东-利雅得
华南-广州
华东-上海一
华北-北京四
西南-贵阳一
华南-广州友好用户环境
拉美-墨西哥城二
亚太-新加坡
亚太-曼谷
拉美-圣保罗一
非洲-约翰内斯堡
土耳其-伊斯坦布尔
中国-香港
拉美-圣地亚哥
亚太-雅加达
华东二
鲲鹏独享型
1:8
按需/包年
包月
华东-上海二
华北-北京二
西南-贵阳一
华北-北京四
华东-上海一
华南-广州
华南-广州友好用户环境
华东二
云数据库 GaussDB
产品介绍 6 数据库实例规格
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 21
6-2 支持的性能规格
产品
类型
实例
类型
规格 vCPU() 内存(GB) 默认最大连接数
(单个CN
企业
分布
独享型(1:4
说明
独享型(1:4)基
X86架构。
8
32 100
16 64 1000
24 96 3000
32 128 3000
48 192 3000
64 256 4000
96 384 6000
独享型(1:8
说明
独享型(1:8)基
X86架构。
8
64 1000
16 128 2000
24 192 3000
32 256 4000
48 384 6000
64 512 8000
鲲鹏独享型
1:4
说明
鲲鹏独享型
1:4)基于
ARM架构。
8
32 100
16 64 1000
24 96 3000
32 128 2000
48 192 3000
64 256 4000
96 384 3000
鲲鹏独享型
1:8
说明
鲲鹏独享型
1:8)基于
ARM架构。
8
64 1000
16 128 2000
24 192 3000
32 256 4000
48 384 6000
60 480 8000
主备
独享型(1:4
说明
独享型(1:4)基
X86架构。
4
16 300
8 32 600
16 64 2048
云数据库 GaussDB
产品介绍 6 数据库实例规格
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 22
产品
类型
实例
类型
规格 vCPU() 内存(GB) 默认最大连接数
(单个CN
24 96 2048
32 128 5000
48 192 3000
96 384 6000
独享型(1:8
说明
独享型(1:8)基
X86架构。
4
32
说明
该规格不能用
于生产环境。
仅针对特定用
户开放,如需
配置白名单权
限,您可以在
管理控制台右
上角,选择
> 新建工
,提交开通
白名单的申
请。
600
8 64
说明
2.6及以上
的主备版实例
可用于生产环
境,其他情况
下不能用于生
产环境。
2048
16 128 5000
24 192 3000
32 256 11000
48 384 6000
64 512 25000
鲲鹏独享型
1:4
说明
鲲鹏独享型
1:4)基于
ARM架构。
4
16 300
8 32 600
16 64 2048
24 96 2048
32 128 5000
48 192 3000
96 384 6000
云数据库 GaussDB
产品介绍 6 数据库实例规格
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 23
产品
类型
实例
类型
规格 vCPU() 内存(GB) 默认最大连接数
(单个CN
鲲鹏独享型
1:8
说明
鲲鹏独享型
1:8)基于
ARM架构。
4
32
说明
该规格不能用
于生产环境。
仅针对特定用
户开放,如需
配置白名单权
限,您可以在
管理控制台右
上角,选择
> 新建工
,提交开通
白名单的申
请。
600
8 64
说明
2.6及以上
的主备版实例
可用于生产环
境,其他情况
下不能用于生
产环境。
2048
16 128 5000
24 192 3000
32 256 11000
48 384 6000
60 480 24000
基础
分布
独享型(1:4
说明
独享型(1:4)基
X86架构。
16
64 200
32 128 350
64 256 900
独享型(1:8
说明
独享型(1:8)基
X86架构。
16
128 350
32 256 900
64 512 2000
鲲鹏独享型
1:4
说明
鲲鹏独享型
1:4)基于
ARM架构。
16
64 200
32 128 350
云数据库 GaussDB
产品介绍 6 数据库实例规格
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 24
产品
类型
实例
类型
规格 vCPU() 内存(GB) 默认最大连接数
(单个CN
鲲鹏独享型
1:8
说明
鲲鹏独享型
1:8)基于
ARM架构。
16
128 350
32 256 900
60 480 1800
惠选型(1:4
说明
惠选型(1:4)基
X86架构。
16
64 200
32 128 350
64 256 2000
惠选型(1:8
说明
惠选型(1:8)基
X86架构。
16
128 350
32 256 900
64 512 2000
主备
通用型(1:4
说明
通用型(1:4)基
X86架构。
4
16 300
8 32 600
独享型(1:4
说明
独享型(1:4)基
X86架构。
4
16 300
8 32 600
16 64 2048
32 128 5000
64 256 11000
鲲鹏独享型
1:4
说明
鲲鹏独享型
1:4)基于
ARM架构。
4
16 300
8 32 600
16 64 2048
32 128 5000
惠选型(1:4
说明
惠选型(1:4)基
X86架构。
4
16 300
8 32 600
16 64 2048
32 128 5000
64 256 11000
惠选型(1:8
说明
惠选型(1:8)基
X86架构。
8
64 1000
16 128 2000
32 256 4000
云数据库 GaussDB
产品介绍 6 数据库实例规格
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 25
产品
类型
实例
类型
规格 vCPU() 内存(GB) 默认最大连接数
(单个CN
64 512 8000
云数据库 GaussDB
产品介绍 6 数据库实例规格
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 26
7 Oracle 兼容性说明
7.1 分布式
7.1.1 Oracle 数据库兼容性概述
GaussDB数据库在基本功能(数据类型、SQL、数据库对象等)和PLSQL方面与Oracle
数据库基本兼容。但是由于架构设计方面的差异,还是存在一些不兼容的项,本章节
主要介绍GaussDB数据库的Oracle兼容模式与Oracle数据库19C版本的兼容性对比信
息。
7.1.2 SQL 的基本元素
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 27
7.1.2.1 数据类型
7-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 支持 -
7-2 日期时间类型
序号
Oracle数据类型 GaussDB数据库是
否支持
差异
1 DATE 支持,有差异 精度有差异,
GaussDB支持的公
元时间相较于
Oracle范围更大。
2
TIMESTAMP
[ ( fractional_seconds_precisio
n ) ]
支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 28
序号 Oracle数据类型 GaussDB数据库是
否支持
差异
3 TIMESTAMP
[ ( fractional_seconds_precisio
n ) ] WITH TIME ZONE
支持,有差异
GaussDB
timestamptz等价
Oracle
timestampwithloa
cltimezone,缺少
Oracle对应的
timestamptz
型。
时区更新:部分国
家或地区可能会经
常更新时区信息,
数据库系统也因此
常常需要同步修改
时区文件以确保时
间内容的正确性。
GaussDB时区类型
目前只涉及
timestamp with
timezone,当新的
时区文件生效时,
不会对已有的数据
进行变更,新数据
会随时区文件信息
进行同步调整。与
Oracle的同类型数
据能力存在差异。
4
TIMESTAMP
[ ( fractional_seconds_precisio
n ) ] WITH LOCAL TIME ZONE
不支持
-
5 INTERVAL YEAR
[ ( year_precision ) ] TO
MONTH
支持
-
6 INTERVAL DAY
[ ( day_precision ) ] TO
SECOND
[ ( fractional_seconds_precisio
n ) ]
支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 29
7-3 字符类型
序号 Oracle数据类型 GaussDB数据库
是否支持
差异
1 VARCHAR2 ( size [ BYTE
| CHAR ] )
支持,有差异 GaussDB中,size单位
为字节,即仅支持BYTE
不支持在BYTECHAR
间选择,最大容量为
10MB;而在Oracle中,
size的单位可以在BYTE
CHAR之间选择,
MAX_STRING_SIZE=EXTE
NDED时,最大长度为
32767字节,
MAX_STRING_SIZE=STAN
DARD时,最大长度为
4000字节,实际能容纳的
字符数与使用的字符集有
关。
2 NVARCHAR2 ( size ) 支持,有差异 GaussDB中,
NVARCHAR2(n)类型是
VARCHAR2(n)类型的别
名;而在Oracle
NVARCHAR2(n)
VARCHAR2(n)有一定的区
别,
MAX_STRING_SIZE=EXTE
NDED时,最大长度为
32767字节,
MAX_STRING_SIZE=STAN
DARD时,最大长度为
4000字节,实际能容纳的
字符数与使用的字符集有
关。
3 CHAR [ ( size [ BYTE |
CHAR ] ) ]
支持,有差异 GaussDB中,size单位
为字节,即仅支持BYTE
不支持在BYTECHAR
间选择,最大容量为
10MB;而在Oracle中,
size的单位可以在BYTE
CHAR之间选择,最大容
量为2000个字节,实际能
容纳的字符数与使用的字
符集有关。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 30
序号 Oracle数据类型 GaussDB数据库
是否支持
差异
4 NCHAR [ ( size ) ] 支持,有差异 GaussDB中,size单位
为字节,最大容量为
10MB;而在Oracle中,
size单位为字符,最大容
量为2000个字节,实际能
容纳的字符数与使用的字
符集有关。
5 CLOB 支持,有差异 不支持定位器。
6 NCLOB 不支持 -
7 LONG 不支持 -
7-4 二进制类型
序号 Oracle数据类型 GaussDB数据库是否支持 差异
1 RAW ( size ) 支持,有差异 GaussDB中,size
指字节长度建议值,不
会用于校验输入raw
型的字节长度。
2
LONG RAW 不支持 -
3 BLOB 支持 -
4 BFILE 不支持 -
7-5 ROWID 类型
序号
Oracle数据类型 GaussDB数据库是否支持
1 ROWID 不支持
2 UROWID 不支持
7-6 用户自定义类型
序号
Oracle数据类型 GaussDB数据库是否支持
1 对象类型 不支持
2 REF数据类型 不支持
3 可变数组 支持
4 嵌套表 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 31
7-7 伪类型
序号
Oracle数据类型 GaussDB数据库是否支持
1 anytype 不支持
2 anydata 不支持
3 anydataset 不支持
7-8 xml 类型
序号 Oracle数据类型 GaussDB数据库是
否支持
差异
1 XMLTYPE 支持,有差异 GaussDB中不支持部分操
作,如不能通过使用
XMLELEMENT函数将字符串
转变为XMLTYPE类型,而是
转变成XML类型。具体请参
见《开发指南》中“SQL
> 数据类型 > XMLTYPE
类型”章节。
2 URIType 不支持 -
7-9 空间类型
序号
Oracle数据类型 GaussDB数据库是否支
1 SDO_GEOMETRY 不支持
2 SDO_TOPO_GEOMETRY 不支持
3 SDO_GEORASTER 不支持
7-10 锁模式
级别
Oracle锁模式 GaussDB锁模式 备注
- - NULL GaussDBNULL表示未被赋予
锁,与Oracle0级锁对应。
0 none INVALID GaussDBINVALID表示被赋予
了非法锁。仅在运行过程中出现
GaussDB无法识别的锁时会被
赋予INVALID锁。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 32
级别 Oracle锁模式 GaussDB锁模式 备注
1 null AccessShare -
2 RS RowShare -
3 RX RowExclusive -
4 S ShareUpdateExclus
ive
-
5 SRX Share -
6 \ ShareRowExclusive -
7 X Exclusive -
8 \ AccessExclusive -
7.1.2.2 数据类型比较规则
数据类型比较(排序)规则是指相同数据类型的值之间发生比较(排序)时遵循的比
较(排序)规则。
7-11 比较规则
Oracl
e数据
GaussD
B数据库
差异 规则描述
1 Nume
ric
支持 - 支持基于数值大小的比
较,位于数轴中相对靠
近正方向的数字大于位
于数轴中相对靠近反方
向的数字,如 5 > 31
> -1-1 > -2
2
日期
时间
支持
- 支持基于日期早晚的比
较,较晚的日期或时间
戳大于较早的日期或时
间戳,如'2000-01-01
12:00:00' >
'2000-01-01
11:59:59'
3 二进
制值
支持 - 支持基于二进制值大小
的比较,位于数轴中相
对靠近正方向的数字大
于位于数轴中相对靠近
反方向的数字,如
1001 0101 > 1001
0011
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 33
Oracl
e数据
GaussD
B数据库
差异 规则描述
4 字符
支持,有
差异
GaussDBOracle中,支
持的比较规则不完全相同,
相同比较规则的名称也可能
不同。
GaussDBOracle的比较规
则在可指定性上有差异,例
GaussDB不支持指定表级
别的比较规则,而Oracle
持。
GaussDBOracle在指定比
较规则的语法上有差异,例
如在GaussDB中,使用
ENCODINGLC_CTYPE
LC_COLLATE三个参数决定
创建数据库时使用的字符
集、字符分类和比较规则,
具体请参见《开发指南》中
SQL参考 > SQL语法 > C
> CREATE DATABASE”章
节。而在Oracle中,各级别
的比较规则通常由一系列带
NLS前缀的参数确定。
-
5 对象
不支持 - -
6 Varra
ys
嵌套
支持,有
差异
GaussDBOracle均支持
Varrays的比较,与Oracle不同
的是,GaussDB不仅支持比较
两个Varrays中的元素个数,还
支持同类型的Varrays之间的比
较。
-
7 数据
类型
优先
支持
- -
8 数据
转换
(显
/
式类
型转
换)
支持 - -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 34
7.1.2.3 字面量
7-12 字面量
序号
Oracle数据库 GaussDB数据库
1 文本字面量 支持
2 数值字面量 支持
3 日期时间字面量 支持
4 区间字面量 支持
7.1.2.4 格式模型
7-13 格式
序号 Oracle数据库 GaussDB
据库
差异
1 数字格式 支持,有差
GaussDB仅在参数
a_format_version值为10c
a_format_dev_version值为s1的情
况下,支持$CTMTM9
TMEU格式。同时在该参数下,
不支持THPLSG格式。
GaussDB具体支持情况请参见《开
发指南》中“SQL参考>函数和操作
>类型转换函数”章节的
number类型fmt参数表”。
2 日期时间格式 支持,有差
GaussDB中用于时间截断和时间四
舍五入的参数,仅在参数
a_format_version值为10c
a_format_dev_version值为s1的情
况下有效。
GaussDB具体支持情况请参见《开
发指南》中“SQL参考>函数和操作
>时间和日期处理函数和操作
符”章节的“用于日期/时间格式化
的模式”。
3 格式模型修饰符 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 35
序号 Oracle数据库 GaussDB
据库
差异
4 字符串到日期转换
规则
支持,有差
GaussDBto_timestamp_tz函数
在参数a_format_version值为10c
a_format_dev_version值为s1的情
况下有效。
GaussDB具体支持情况请参见《开
发指南》中“SQL参考 > 函数和操
作符 > 类型转换函数”章节的
to_date/to_timestamp/
to_timestamp_tz”。
5 xml格式模式 不支持 -
7.1.2.5 空值
7-14 空值
序号 Oracle数据库 GaussDB数据库
1 IS NULLIS NOT NULL 支持
2 NULLS in conditions 支持
7.1.2.6 注释
7-15 comment
序号
Oracle数据库 GaussDB数据库 差异
1 斜杠和星号
/*
支持 -
2 两个连字符
--
支持 -
3 COMMENT
支持 -
4 HINT 支持,有差异 GaussDB不支持'--+'hint形式。
具体信息请参见《开发指南》中
SQL调优指南 > 使用Plan
Hint进行调优”章节。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 36
7.1.2.7 数据库对象
7-16 schema 对象
序号
Oracle数据库 GaussDB
据库
差异
1 分析视图 不支持 -
2 属性维度 不支持 -
3 集群 支持 -
4 约束 支持 -
5 数据库链接 支持 -
6 数据库触发器 支持 -
7 尺寸 支持 -
8 外部过程库 不支持 -
9 分层结构 不支持 -
10 索引组织表 不支持 -
11 索引 支持 -
12 索引类型 不支持 -
13 java 不支持 -
14 java资源 不支持 -
15 java源码 不支持 -
16 join groups 不支持 -
17 物化视图 支持 -
18 物化视图日志 不支持 -
19 挖掘模型 不支持 -
20 对象表 不支持 -
21 对象类型 不支持 -
22 对象视图 不支持 -
23 operators 支持 -
24 支持 -
25 序列 支持 -
26 存储函数 支持 -
27 存储过程 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 37
序号 Oracle数据库 GaussDB
据库
差异
28 同义词 支持,有差
Oracle数据库的数据库对象在同一
namespace内不能重名。GaussDB同一
namespace内同义词可与表、视图、函
数、package重名,如果重名,会优先访
问该名称对象,未寻找到该名称对象时才
会寻找该名称的同义词指向的对象;同义
词指向的对象的Schema名是用户名时才
会搜索PUBLIC同义词。详细的搜索顺序
参考《开发指南》中的“SQL参考 > SQL
语法 > C > CREATE SYNONYM”章节中
的注意事项,同义词的搜索过程。
29 支持 -
30 视图 支持 -
31 zone map 不支持 -
7-17 nonschema 对象
序号
Oracle数据库 GaussDB数据库
1 上下文 不支持
2 目录 支持
3 版本 不支持
4 闪回存档 不支持
5 锁定配置文件 不支持
6 配置文件 不支持
7 还原点 支持
8 角色 支持
9 回滚段
ustore支持回滚段
astore不支持回滚段
10
表空间 支持
11 表空间集 不支持
12 统一审计策略 支持
13 用户 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 38
7.1.2.8 数据库对象名称和限定符
7-18 命名规则
序号
Oracle数据库 GaussDB
据库
差异
1 数据库对象命名规则 支持,有差
GaussDB默认小
写。
2 模式对象命名规则 支持 -
7.1.2.9 SQL 语句中的引用架构对象和部件的语法
7-19 对象引用
序号 Oracle数据库 GaussDB数据库
1 引用对象的一般语法 支持
2 解析对象的引用 支持
3 引用外部模式对象 支持
4 引用外部数据库对象 支持
5 引用表和索引分区和子分区 支持
7.1.3 伪列
GaussDB数据库兼容序列伪列、rownum伪列,其余暂不支持。
序列伪列
7-20 序列
序号
Oracle数据库 GaussDB数据库 差异
1 currval 支持,有差异 GaussDB以函数形式实
现。兼容Oracle调用方
式。
2
nextval 支持,有差异 GaussDB以函数形式实
现。兼容Oracle调用方
式。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 39
rownum 伪列
7-21 rownum
序号
Oracle数据库 GaussDB数据库 差异
1 rownum 支持,有差异 Oracleleftrightfull
join的条件中使用rownum
行过滤时,不同的条件下表
现不尽相同,可能存在忽略
或部分忽略rownum条件的
现象,而GaussDB在此情况
下则表现为对leftright
full join后的结果进行过滤。
xmldata 伪列
7-22 xmldata
序号 Oracle数据库 GaussDB数据库
1 xmldata 不支持
7.1.4 操作符
GaussDB数据库兼容除分层查询以外的运算符。
SQL 运算符
7-23 SQL 运算符
序号
Oracle数据库 GaussDB数据库
1 一元运算符和二元运算符 支持
2 运算符优先级 支持
算术运算符
7-24 算术运算符
序号
Oracle数据库 GaussDB数据库
1 正负(+-)一元运算符 支持
2 加减(+-)二元运算符 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 40
序号 Oracle数据库 GaussDB数据库
3 乘除(*/)二元运算符 支持
COLLATE 运算符
7-25 COLLATE 运算符
序号 Oracle数据库 GaussDB数据库
1 COLLATE collation_name 支持
连接运算符
7-26 连接运算符
序号 Oracle数据库 GaussDB数据库
1 || 支持
集合运算符
7-27 集合运算符
序号
Oracle数据库 GaussDB数据库
1 union 支持
2 union all 支持
3 intersect 支持
4 minus 支持
多集合运算符
7-28 多集合运算符
序号
Oracle数据库 GaussDB数据库
1 multiset except 支持
2 multiset intersect 支持
3 multiset union 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 41
用户自定义运算符
7-29 用户自定义运算符
序号
Oracle数据库 GaussDB数据库 差异
1 CREATE
OPERATOR
支持
Oracle中提供的
CONTEXT_CLAUSE支持
自定义功能评估函数,和
GaussDB约束选择性评估
函数不同。GaussDB不支
持自定义功能评估函数。
GaussDBOracle可选参
数差异较大。GaussDB
体请参考《开发指南》中
SQL参考 > SQL语法 >
C > CREATE
OPERATOR”章节的参数
说明部分。
比较操作符
序号
Oracle数据库 GaussDB数据库
1 < = 支持。
2 < > 支持。
3 > = 支持。
4 ^ = 支持。
5 ! = 不支持,!=中间存在空
格时,!会被识别为阶
乘。
当比较操作符(<=<>>=^=)中间存在空格时,也可以识别成没有空格进行正常
操作。!=中间存在空格时,!会被识别为阶乘,可能会导致结果与预期不一致。
7.1.5 表达式
GaussDB数据库兼容大部分数据库表达式。
7-30 表达式
序号
Oracle数据库 GaussDB数据
差异
1 简单表达式 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 42
序号 Oracle数据库 GaussDB数据
差异
2 分析视图表达
不支持 -
3 复合表达式 支持 -
4 case表达式 支持 -
5 列表示式 支持 -
6 cursor表达式 不支持 -
7 日期时间表达
支持,有差异 GaussDB的输出结果中不会带时区信
息,Oracle会带有类似PM AMERICA/
LOS_ANGELES的时区信息。
8
函数表达式 支持 -
9 区间表达式 部分支持 GaussDB支持形如SELECT INTERVAL
'999999999 23:59:59.999' day(9) to
second FROM DUAL;的语句,而不支持
形如SELECT(SYSDATE- SYSDATE) DAY
TO SECOND FROM DUAL;的语句。
Oracle均支持。
10
json对象访问
表达式
部分支持,有
差异
GaussDB支持通过“->'key'“的方式
JSON对象中提取value,而Oracle
支持通过“.key“方式来提取value
对于JSONARRY对象而言,Oracle
持通过“.key“方式一次性提取所有
key对应的value,但GaussDB目前不
支持。
11 模型表达式 不支持 -
12 对象表达式 不支持 -
13 占位符表达式 部分支持 对于形如“:var“的一般占位符表达式,
GaussDB支持,但不支持通过
INDICATOR关键字将两个一般占位符表
达式结合起来。
14
标量子查询表
达式
支持 -
15 类型构造器表
达式
部分支持 GaussDB不支持在类型构造器前指定
New关键字,而Oracle支持。
16 表达式list 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 43
7.1.6 条件
本章节描述常见的条件兼容项,包含比较条件、浮点条件、逻辑条件、模型条件、多
集合条件、模式匹配条件、NULL值条件、XML条件、SQL/JSON条件、复合条件、
BETWEEN条件、EXISTS条件、IN条件、IS OF TYPE条件,如7-31所示。
7-31 条件
序号 Oracle数据库 GaussDB数据
差异
1 比较条件 支持,有差异 语句中存在ANYSOMEALL操作符时
存在差异,Oracle支持对list对象进行操
作,而GaussDB中需要将list对象转换成
数组表达式的形式后再进行操作。
2
浮点条件 不支持 -
3 逻辑条件 支持 -
4 模型条件 不支持 -
5 多集合条件 不支持 -
6 模式匹配条件 支持 -
7 NULL值条件 支持 -
8 XML条件 不支持 -
9 SQL/JSON
部分支持,有
差异
GaussDB不支持IS JSON条件和
JSON_TEXTCONTAINS条件。
GaussDBJSONB_EQ条件等同于
OracleJSON_EQUAL条件,但
GaussDB不支持ERROR子句。
GaussDBJSONB_EXISTS条件等同
OracleJSON_EXISTS条件,但
GaussDB不支持ERROR子句、EMPTY
子句和PASSING子句。
10 复合条件 支持 -
11 BETWEEN
支持 -
12 EXISTS条件 支持 -
13 IN条件 支持 -
14 IS OF TYPE
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 44
7.1.7 常见的 SQL DDL 子句
本章节描述常见的SQL DDL子句兼容项,包含分配扩展子句、约束、取消分配未使用
子句、文件规范、日志记录子句、并行子句、物理属性子句、大小子句、存储子句、
聚集函数嵌套,如7-32所示。
7-32 常用 SQL DDL 子句
序号 Oracle数据库 GaussDB数据
差异
1 分配扩展子句
语法:
ALLOCATE
EXTENT
[ ( { SIZE
size_clause |
DATAFILE
'lename' |
INSTANCE
integer } ...
) ]
例如:创建
employees
后,改变表的
分配扩展size
10M
SQL> create table
employees(EMPLO
YEE_ID
NUMBER(38),
JOB_ID
NUMBER(38),
SALARY
NUMBER(38),
LAST_NAME
VARCHAR2(16));
Table created.
SQL> ALTER
TABLE employees
ALLOCATE
EXTENT (SIZE
10M);
Table altered.
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 45
序号 Oracle数据库 GaussDB数据
差异
2 约束
语法:
{ inline_constraint
|
out_of_line_constr
aint |
inline_ref_constrai
nt |
out_of_line_ref_co
nstraint }
例如:创建表
sta,约束子
句中指定ID
列、NAME
不为空。
SQL> CREATE
TABLE sta(ID
INT NOT NULL,
NAME char(8)
NOT NULL, AGE
INT, ADDRESS
CHAR(50),
SALARY REAL);
Table created.
支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 46
序号 Oracle数据库 GaussDB数据
差异
3 取消分配未使
用子句
语法:
DEALLOCATE
UNUSED [ KEEP
size_clause ]
例如:创建
employees
表,进行了一
些插入、删除
操作后,希望
使用取消分配
未使用子句释
employees
表未使用的空
间。
SQL> create table
employees(EMPLO
YEE_ID
NUMBER(38),
JOB_ID
NUMBER(38),
SALARY
NUMBER(38),
LAST_NAME
VARCHAR2(16));
Table created.
- 进行一些插入、
删除操作
SQL> ALTER
TABLE employees
DEALLOCATE
UNUSED;
Table altered.
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 47
序号 Oracle数据库 GaussDB数据
差异
4 文件规范
语法:
{[ 'lename' |
'ASM_lename' ]
[ SIZE
size_clause ]
[ REUSE ]
[ autoextend_clau
se ]}
|
{[ 'lename |
ASM_lename' |
('lename |
ASM_lename'
[, 'lename |
ASM_lename' ]...
) ] [ SIZE
size_clause ]
[ BLOCKSIZE
size_clause
[ REUSE ]}
例如:创建一
个临时表空间
tbs_temp_01
SQL语句的
文件规范子句
中指定在表空
间中创建一个
临时数据库文
templ01.dbf
可以自动扩
展,并将表空
间分配给表空
间组
tbs_grp_01
SQL> CREATE
TEMPORARY
TABLESPACE
tbs_temp_01
TEMPFILE
'temp01.dbf'
AUTOEXTEND
ON TABLESPACE
GROUP
tbs_grp_01;
Tablespace
created.
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 48
序号 Oracle数据库 GaussDB数据
差异
5 日志记录子句
语法:
{ LOGGING |
NOLOGGING |
FILESYSTEM_LIKE_
LOGGING }
部分支持,有
差异
GaussDB不支持LOGGING约束子句和
FILESYSTEM_LIKE_LOGGING约束子
句。
例如:
GaussDB创建表,带LOGGING约束子
句,语法报错。
gaussdb=# CREATE LOGGING TABLE
my_tab(id int, name char(16));
ERROR: syntax error at or near "LOGGING"
LINE 1: CREATE LOGGING TABLE my_tab(id
int, name char(16));
^
GaussDB创建表,带
FILESYSTEM_LIKE_LOGGING约束子
句,语法报错。
gaussdb=# CREATE
FILESYSTEM_LIKE_LOGGING TABLE my_tab(id
int, name char(16));
ERROR: syntax error at or near
"FILESYSTEM_LIKE_LOGGING"
LINE 1: CREATE FILESYSTEM_LIKE_LOGGING
TABLE my_tab(id int, name cha...
^
GaussDB仅支持表级的UNLOGGED
束,不支持列级的UNLOGGED约束。
例如:GaussDB创建表,带列级的
UNLOGGED约束子句,语法报错。
gaussdb=# CREATE UNLOGGED TABLE
my_tab(id int UNLOGGED, name char(16));
ERROR: syntax error at or near "UNLOGGED"
LINE 1: CREATE UNLOGGED TABLE my_tab(id
int UNLOGGED, name char(16))...
^
GaussDB仅支持在CREATE TABLE
CREATE TABLE ASSELECT INTO
句中使用日志记录子句。
例如:GaussDB创建TABLESPACE
UNLOGGED约束子句,语法报错。
gaussdb=# CREATE UNLOGGED TABLESPACE
tbs1 RELATIVE LOCATION 'tablespace1/
tablespace_1';
ERROR: syntax error at or near "TABLESPACE"
LINE 1: CREATE UNLOGGED TABLESPACE tbs1
RELATIVE LOCATION 'tablespac...
^
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 49
序号 Oracle数据库 GaussDB数据
差异
6 并行子句
语法:
{ NOPARALLEL |
PARALLEL
[ integer ] }
例如:创建表
t1,并在并行
子句中指定
PARALLEL 4
意为查询和更
新表t1时最多
使用4个并行
进程操作。
SQL> CREATE
TABLE t1 (id
NUMBER, name
VARCHAR2(50))
PARALLEL 4;
Table created.
不支持 -
7 物理属性子句
语法:
[ { PCTFREE
integer |
PCTUSED
integer |
INITRANS
integer |
storage_clause }..
. ]
部分支持,有
差异
GaussDB不支持PCTUSED
例如:执行在表tbl1中创建一个
tbl1_ind的索引的SQL语句,并在该语
句的物理属性子句中指定索引的空间
利用率PCTUSED20%GaussDB
行该SQL语句语法报错。
gaussdb=# CREATE INDEX tbl1_ind ON tbl1
(name) PCTUSED 20;
ERROR: syntax error at or near "PCTUSED"
LINE 1: CREATE INDEX tbl1_ind ON tbl1
(name) PCTUSED 20;
^
GaussDB 仅支持在CREATE TABLE
CREATE INDEX语句中使用物理属性
子句。
例如:尝试从表tbl1中获取数据,创
建物化视图tbl1_mv,并在物理属性
子句中指定该视图的初始化事务数为
30GaussDB执行该SQL语句语法报
错。
gaussdb=# CREATE MATERIALIZED VIEW
tbl1_mv INITRANS 30 as select * from tbl1;
ERROR: syntax error at or near "INITRANS"
LINE 1: CREATE MATERIALIZED VIEW tbl1_mv
INITRANS 30 as select * fro...
^
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 50
序号 Oracle数据库 GaussDB数据
差异
8 大小子句
语法:
integer [ K | M | G
| T | P | E ]
例如:创建一
个临时表空间
tbs_temp_01
,并在表空间
中创建一个临
时数据库文件
templ01.dbf
SQL语句的大
小子句中指定
初始大小是
5M,可以自动
扩展,并将表
空间分配给表
空间组
tbs_grp_01
SQL> CREATE
TEMPORARY
TABLESPACE
tbs_temp_01
TEMPFILE
'temp01.dbf' SIZE
5M AUTOEXTEND
ON TABLESPACE
GROUP
tbs_grp_01;
Tablespace
created.
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 51
序号 Oracle数据库 GaussDB数据
差异
9 存储子句
语法:
STORAGE
({ INITIAL
size_clause |
NEXT size_clause
| MINEXTENTS
integer |
MAXEXTENTS
{ integer |
UNLIMITED } |
maxsize_clause |
PCTINCREASE
integer |
FREELISTS
integer |
FREELIST
GROUPS integer
| OPTIMAL
[ size_clause |
NULL ] |
BUFFER_POOL
{ KEEP | RECYCLE
| DEFAULT } |
FLASH_CACHE
{ KEEP | NONE |
DEFAULT } |
( CELL_FLASH_CA
CHE ( KEEP |
NONE |
DEFAULT ) ) |
ENCRYPT } ... )
部分支持,有
差异
Oracle中由STORAGE子句指定存储参
数,而GaussDB中由WITH子句指定
存储参数。
例如:
Oracle中创建表my_tab1,在存储子
句中指定表初始大小为10M,需要更
多空间时每次增加5MSQL语句如
下:
SQL> CREATE TABLE my_tab1 (id
NUMBER(10) PRIMARY KEY, name
VARCHAR2(50)) STORAGE (INITIAL 10M NEXT
5M);
Table created.
GaussDB中创建表my_tab2,在存储
子句中指定存储引擎类型为USTORE
SQL语句如下:
gaussdb=# CREATE TABLE my_tab2 (id
NUMBER(10) PRIMARY KEY, name
VARCHAR2(50)) with (storage_type=ustore);
NOTICE: CREATE TABLE / PRIMARY KEY will
create implicit index "my_tab2_pkey" for table
"my_tab2"
CREATE TABLE
GaussDB中可选的存储参数和Oracle
存在很大差异。GaussDB具体可参见
《开发指南》中“SQL参考 > SQL
> C > CREATE TABLE”的参数说
明部分,“WITH
({storage_parameter = value}
[, ...])”中描述了CREATE TABLE语句
支持的存储参数。
7.1.8 SQL 查询和子查询
GaussDB数据库兼容除分层查询以外的SQL查询和子查询。
7-33 SQL 查询和子查询
序号
Oracle数据库 GaussDB数据
差异
1 创建简单查询 支持 -
2 分层查询 不支持 -
3 UNION
[ALL]
INTERSECT
减运算符
支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 52
序号 Oracle数据库 GaussDB数据
差异
4 查询结果排序 支持,有差异 GaussDB查询不包含分组,且目标列同
时包含聚集函数和集合返回函数时,不
忽略对集合返回函数列的排序。
5
Joins 支持,有差异 GaussDB只支持和Oracle相同的Join
Types,如leftrightself natural
full outer join等。不支持In-Memory
Join GroupsJoin Optimizations方法。
6
使用子查询 支持 -
7 嵌套子查询的
解嵌套
支持,有差异 GaussDB不支持显式指定HASH_AJ
MERGE_AJ
8 分布式查询 支持,有差异 GaussDB需要显式DBLINK查询。
9 聚集函数嵌套 支持 -
7.1.9 PL/SQL 语言
GaussDB数据库基本兼容的PL/SQL操作符、表达式,控制语句、集合和record等等,
不支持预定义的PL/SQL常量和类型、子类型等。
7.1.9.1 PL/SQL 基本语法
7-34 PL/SQL 操作符
序号
Oracle数据库 GaussDB数据库
1 + 支持
2 := 支持
3 => 支持
4 % 支持
5 ' 支持
6 . 支持
7 || 支持
8 / 支持
9 ** 不支持
10 ( 支持
11 ) 支持
12 : 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 53
序号 Oracle数据库 GaussDB数据库
13 , 支持
14 << 支持
15 >> 支持
16 /* 支持
17 */ 支持
18 * 支持
19 " 支持
20 .. 支持
21 = 支持
22 <> 支持
23 != 支持
24 ~= 支持
25 ^= 支持
26 < 支持
27 > 支持
28 <= 支持
29 >= 支持
30 @ 支持
31 -- 支持
32 ; 支持
33 - 支持
7-35 逻辑运算符
序号
Oracle数据库 GaussDB数据库
1 NOT 支持
2 AND 支持
3 OR 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 54
7-36 比较表达式
序号 Oracle数据库 GaussDB数据库
1 IS [NOT] NULL 支持
2 LIKE 支持
3 BETWEEN 支持
4 IN 支持
7-37 条件表达式
序号 Oracle数据库 GaussDB数据库
1 simple CASE 支持
2 searched CASE 支持
7-38 变量声明相关参数
序号
Oracle数据
GaussDB数据
差异
1 %TYPE 支持,有差异
GaussDB不支持record变量%type
GaussDB不支持pkg.record变量%type
schema.pkg.record变量%type作为出入
参类型。
GaussDB不支持表/视图.column.column
%typeschema./
.column.column%type嵌套1层及以
上,作为变量类型或者出入参类型。
GaussDB不支持record
.column.column%typepkg.record
.column.column%type嵌套1层及以上
record的某列类型,作为变量类型或者
出入参类型。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 55
序号 Oracle数据
GaussDB数据
差异
2 %ROWTYP
E
支持,有差异
GaussDB在多个CN的环境下,存储过程
中无法声明临时表的%ROWTYPE
%TYPE属性。因为临时表仅在当前
session有效,在编译阶段其他CN无法看
到当前CN的临时表。故多个CN的环境
下,会提示该临时表不存在。
GaussDB不支持view%rowtype
schema.view%rowtype作为出入参类
型。
GaussDB不支持package.cursor
%rowtype作为出入参类型。
7.1.9.2 数据类型兼容性
7-39 其他 PL/SQL 数据类型
序号
Oracle数据库 GaussDB数据
差异
1 CHARACTER 支持,有差异
GaussDB中字节长度限制为:
1~10485760
Oracle中字节长度限制为:
1~32767
2
VARCHAR 支持,有差异
GaussDB中字节长度限制为:
1~10485760
Oracle中字节长度限制为:
1~32767
3
STRING 不支持 -
4 PLS_INTEGER 不支持 GaussDB中可使用INT类型替代。
5 BINARY_INTE
GER
支持 -
7.1.9.3 控制语句
7-40 条件语句
序号
Oracle数据库 GaussDB数据库
1 IF THEN 支持
2 IF THEN ELSE 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 56
序号 Oracle数据库 GaussDB数据库
3 IF THEN ELSIF 支持
4 simple CASE:
CASE selector
WHEN selector_value_1 THEN
statements_1
WHEN selector_value_2 THEN
statements_2
...
WHEN selector_value_n THEN
statements_n
[ ELSE
else_statements
END CASE;]
支持
5 searched CASE:
CASE
WHEN condition_1 THEN statements_1
WHEN condition_2 THEN statements_2
...
WHEN condition_n THEN statements_n
[ ELSE
else_statements
END CASE;]
支持
7-41 LOOP 循环语句
序号
Oracle数据库 GaussDB数据库
1 [ label ] LOOP
statements
END LOOP [ label ];
支持
2 EXIT 支持
3 EXIT WHEN 支持
4 CONTINUE 支持
5 CONTINUE WHEN 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 57
7-42 FOR 循环语句
序号 Oracle数据库 GaussDB
数据库
差异
1 [ label ] FOR index IN
[ REVERSE ]
lower_bound..upper_bo
und LOOP
statements
END LOOP [ label ];
支持,有
差异
GaussDB使用REVERSE关键字时,
lower_bound必须大于等于
upper_bound,否则循环体不会被
执行。
2
EXIT WHEN 支持 -
3 CONTINUE WHEN 支持 -
7-43 WHILE LOOP 循环语句
序号 Oracle数据库 GaussDB数据库
1 [ label ] WHILE condition LOOP
statements
END LOOP [ label ];
支持
7-44 GOTO 语句
序号
Oracle数据库 GaussDB数据库
1 GOTO 支持
7-45 NULL 语句
序号
Oracle数据库 GaussDB数据库
1 NULL 支持
7.1.9.4 集合和 Record
7-46 类型
序号
Oracle数据库 GaussDB数据库
1 Associative array (or index-by
table)
支持
2 VARRAY (variable-size array) 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 58
序号 Oracle数据库 GaussDB数据库
3 Nested table 支持
4 record 支持
7-47 语法
类型 Oracle数据库 GaussDB
数据库
差异
1 Associative
array (or
index-by table)
TABLE OF datatype
[ NOT NULL ]
INDEX BY
{ PLS_INTEGER |
BINARY_INTEGER |
VARCHAR2 ( v_size ) |
data_type }
支持,有
差异
GaussDB不支持
PLS_INTEGER
型,GaussDB
data_type可以为基
础数据类型、或存
储过程内定义的
record类型、集合
类型、数组类型,
不支持ref cursor
型。
GaussDBNOT
NULL只支持语法
不支持功能,即不
会校验元素是否为
NULL
详情可参考《开发
指南》中“存储过
> 数组、集合和
record > 集合”章
节。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 59
类型 Oracle数据库 GaussDB
数据库
差异
2 VARRAY
(variable-size
array)
{ VARRAY |
[ VARYING ] ARRAY }
( size_limit )
OF datatype [ NOT
NULL ]
支持,有
差异
GaussDB内不支持
NOT NULL语法。
GaussDB内不支持
datatypevarray
类型(varray不能
嵌套)。
size_limit功能生效
需要在
behavior_compat_
optionsGUC参数中
开启
varray_compat
数。
详情可参考《开发
指南》中“存储过
> 数组、集合和
record > 数组”章
节。
3 Nested table TABLE OF datatype
[ NOT NULL ]
支持,有
差异
GaussDBNOT
NULL只支持语法
不支持功能。
详情可参考《开发
指南》中“存储过
> 数组、集合和
record > 集合”章
节。
4 record TYPE record_type IS
RECORD
( eld_denition [,
eld_denition]... ) ;
支持
record的列可以定
义为NOT NULL
性也可以指定默认
值。其他类型嵌套
record类型,
record类型的默认
值和NOT NULL
生效;通过
package.record_ty
pe访问类型的形式
来创建record
量,该record变量
的默认值和NOT
NULL不生效。
详情可参考《开发
指南》中“存储过
> 数组、集合和
record > record
章节。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 60
7-48 构造器
序号 Oracle数据库 GaussDB数据库
1 collection_type ( [ value [,
value ]... ] )
支持
7-49 变量赋值
序号 Oracle数据库 GaussDB数据库 差异
1 Associative array
(or index-by
table)
支持
-
2 VARRAY (variable-
size array)
支持,有差异
GaussDB不同VARRAY类型的
数据可以相互赋值,取决于
其元素之间是否能相互隐式
转换。
详情可参考《开发指南》中
“存储过程 > 数组、集合和
record > 数组”章节。
3 Nested table 支持 -
4 record 支持,有差异
GaussDB不同record类型的
数据可以相互赋值,取决于
列与列之间是否能相互隐式
转换。
详情可参考《开发指南》中
“存储过程 > 数组、集合和
record > record ”章节。
7-50 集合操作符
序号
Oracle数据库 GaussDB数据
差异
1 = 支持,有差异
Oracle:比较时忽略集合成员先后顺
序。
GaussDB:比较时严格按照集合成员
先后顺序。
2
<> 支持,有差异
Oracle:比较时忽略集合成员先后顺
序。
GaussDB:比较时严格按照集合成员
先后顺序。
3
IS[NOT]
NULL
支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 61
序号 Oracle数据库 GaussDB数据
差异
4 ^= 支持,有差异
Oracle:比较时忽略集合成员先后顺
序。
GaussDB:比较时严格按照集合成员
先后顺序。
5
~= 不支持 -
6 IS[NOT] A
SET
不支持 -
7 IS [NOT]
EMPTY
不支持 -
8 expr [ NOT ]
MEMBER
[ OF ]
nested_table
不支持
-
9 nested_table1
[ NOT ]
SUBMULTISET
[ OF ]
nested_table2
不支持
-
10 [NOT] IN 支持
Oracle:比较时忽略集合成员先后顺
序。
GaussDB:比较时严格按照集合成员
先后顺序。
7-51 集合 MULTISET 函数
序号
Oracle数据库 GaussDB数据库
1 MULTISET UNION [ALL |
DISTINCT]
支持
2 MULTISET EXCEPT [ALL |
DISTINCT]
支持
3 MULTISET INTERSECT [ALL |
DISTINCT]
支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 62
7-52 集合类型函数
序号 Oracle数据库 GaussDB
据库
差异
1 exists(idx) 支持 -
2 extend[(count[,
idx])]
支持,有差异 GaussDB仅支持nesttable类型。
3 delete[(idx1[,
idx2])]
支持 -
4 trim[(n)] 支持,有差异 GaussDB仅支持nesttable类型。
5 count 支持 -
6 rst 支持 -
7 last 支持 -
8 prior(idx) 支持 -
9 next(idx) 支持 -
10 limit 支持,有差异 GaussDB仅支持nesttable类型。
7-53 record 变量操作
序号
Oracle数据库 GaussDB数据库
1 构造器 支持
2 %ROWTYPE声明变量 支持
3 定义常量constant 不支持
7-54 集合相关函数
序号
Oracle数据库 GaussDB数据库
1 unnest_table(anynesttable
)
支持
2 unnest_table(anyindexbyt
able)
支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 63
7.1.9.5 静态 SQL
7-55 静态查询 SQL 语句
序号
Oracle数据库 GaussDB数据
差异
1 SELECT 支持,有差异 GaussDBOracle在某些场景下有不
同。
GaussDBFOR SHARE对检索出来的行
加共享锁,不同事务的共享锁不会互相
阻塞。若数据在一个事务中被FOR
SHARE锁定,在另一个事务中使用
SELECT FOR SHARE SKIP LOCKED时,
SKIP LOCKED不会跳过锁。
7-56 静态 DML SQL 语句
序号 Oracle数据库 GaussDB数据库
1 INSERT 支持
2 UPDATE 支持
3 DELETE 支持
4 MERGE 支持
5 LOCK TABLE 支持
7-57 静态 TCL SQL 语句
序号
Oracle数据库 GaussDB数据
差异
1 COMMIT 支持 -
2 ROLLBACK 支持 -
3 SAVEPOINT 支持 -
4 SET
TRANSACTIO
N
支持,有差异
GaussDB不支持NAME string语法、USE
ROLLBACK SEGMENT
rollback_segment语法。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 64
7-58 伪列
序号 Oracle数据库 GaussDB数据库 差异
1 CURRVAL and
NEXTVAL
支持 -
2 LEVEL 不支持 -
3 OBJECT_VALUE 不支持 -
4 ROWID 不支持 -
5 ROWNUM 支持,有差异 不推荐ROWNUM条件用于JOIN
ON子句。
GaussDBROWNUM条件用于
JOIN ON子句时在LEFT JOIN
RIGHT JOINFULL JOIN场景
下和MERGE INTO场景下与其他
数据库行为不一致,直接进行业
务迁移存在风险。
7-59 隐式游标属性
序号
Oracle数据库 GaussDB数据库 差异
1 SQL%FOUND 支持,有差异 GaussDBcommit
\rollback之后不刷新隐式游
标结果,Oracle会在
commit\rollback之后刷新
隐式游标结果。
2
SQL%NOTFOUND 支持,有差异
3 SQL%ROWCOUNT 支持,有差异
4 SQL%ISOPEN 支持,有差异
5 SQL
%BULK_ROWCOU
NT
不支持
6 SQL
%BULK_EXCEPTIO
NS
不支持
7-60 显式游标语法及关键字
序号
Oracle数据库 GaussDB数据库
1 CURSOR cursor_name
[ parameter_list ] RETURN
return_type;
支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 65
序号 Oracle数据库 GaussDB数据库
2 CURSOR cursor_name
[ parameter_list ]
[ RETURN return_type ]
IS select_statement;
支持
3 OPEN 支持
4 CLOSE 支持
5 FETCH 支持
6 CURRENT OF CURSOR 支持
7-61 显式游标属性
序号 Oracle数据库 GaussDB数据库
1 SQL%FOUND 支持
2 SQL%NOTFOUND 支持
3 SQL%ROWCOUNT 支持
4 SQL%ISOPEN 支持
7-62 游标循环
序号
Oracle数据库 GaussDB数据库
1 FOR LOOP 支持
7-63 自治事务支持场景
序号
Oracle数据库 GaussDB数据库
1 存储过程 支持
2 匿名块 支持
3 函数 支持
4 Package 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 66
7.1.9.6 动态 SQL
7-64 动态 SQL 语句执行方式
序号
Oracle数据库 GaussDB数据
差异
1 EXECUTE
IMMEDIATE
支持,有差异
GaussDB通过dynamic_sql_compat
数控制同名变量是否读取同一参数,
并且检查调用存储过程时绑定参数出
入参类型是否与语句参数类型一致。
GaussDB不支持调用匿名块中部分绑
定参数场景,例如匿名块中嵌套动态
语句,使用表达式绑定参数,具体请
参见《开发指南》中“存储过程 >
态语句 > 动态调用匿名块”章节。
GaussDB不支持RETURNING
RETURN INTO
2 OPEN FOR
FETCH
CLOSE
支持
-
7.1.9.7 Trigger
7-65 trigger 类型
序号
Oracle数据库 GaussDB数据库 差异
1 DML TRIGGER 支持,有差异 GaussDB不支持Compound
DML Triggers
2 SYSTEM TRIGGER 不支持 -
7-66 create trigger
语法类型
Oracle数据库 Gauss
DB
据库
差异
create语法 CREATE [ OR REPLACE ]
[ EDITIONABLE |
NONEDITIONABLE ]
TRIGGER
plsql_trigger_source
持,
有差
GaussDB不支持OR
REPLACE
EDITIONABLE |
NONEDITIONABLE,支
plsql_trigger_source
部分行为。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 67
语法类型 Oracle数据库 Gauss
DB
据库
差异
plsql_trigger_so
urce ::=
[schema.] trigger_name
[ sharing_clause ]
[ default_collation_clause ]
{ simple_dml_trigger
| instead_of_dml_trigger
| compound_dml_trigger
| system_trigger
}
持,
有差
GaussDB不支持
schema
sharing_clause
default_collation_claus
e
simple_dml_trig
ger ::=
{ BEFORE | AFTER }
dml_event_clause
[ referencing_clause ]
[ FOR EACH ROW ]
[ trigger_edition_clause ]
[ trigger_ordering_clause ]
[ ENABLE | DISABLE ]
[ WHEN ( condition ) ]
trigger_body
持,
有差
GaussDB不支持
referencing_clause
referencing_clause(用
from referencing_table
代替)、
trigger_edition_clause
trigger_ordering_clause
ENABLE | DISABLE
支持trigger_body部分行
为。
GaussDB在没有
INSTEAD OF TRIGGER
的视图上创建语句级
BEFORE/AFTER
TRIGGER时不会报错,
执行DML时报错。
dml_event_claus
e ::=
{ DELETE | INSERT |
UPDATE [ OF column [,
column ]... ] }
[ OR { DELETE | INSERT |
UPDATE [ OF column [,
column]... ] }...
ON [ schema.] { table |
view }
不支
-
trigger_body ::= { plsql_block | CALL
routine_clause }
持,
有差
GaussDB不支持
plsql_block,仅支持
EXECUTE PROCEDURE
function_name
( arguments );方式执行
function,并且function
需要用户定义,必须声
明为不带参数并返回类
型为触发器,在触发器
触发时执行。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 68
语法类型 Oracle数据库 Gauss
DB
据库
差异
instead_of_dml_
trigger ::=
INSTEAD OF { DELETE |
INSERT | UPDATE } [ OR
{ DELETE | INSERT |
UPDATE } ]...
ON [ NESTED TABLE
nested_table_column OF ]
[ schema. ]
noneditioning_view
[ referencing_clause ]
[ FOR EACH ROW ]
[ trigger_edition_clause ]
[ trigger_ordering_clause ]
[ ENABLE | DISABLE ]
trigger_body
持,
有差
GaussDB不支持NESTED
TABLE
nested_table_column
OF
referencing_clause
trigger_edition_clause
trigger_ordering_clause
ENABLE | DISABLE
compound_dml_
trigger ::=
CREATE trigger FOR
dml_event_clause ON view
COMPOUND TRIGGER
INSTEAD OF EACH ROW
IS BEGIN
statement;
END INSTEAD OF EACH
ROW;
不支
-
system_trigger ::
=
{ BEFORE | AFTER |
INSTEAD OF }
{ ddl_event [OR
ddl_event]... |
database_event [OR
database_event ]... }
ON { [schema.] SCHEMA |
[ PLUGGABLE ]
DATABASE }
[ trigger_ordering_clause ]
[ ENABLE | DISABLE ]
trigger_body
不支
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 69
7-67 alter trigger
序号 Oracle数据库 GaussDB数据库 差异
1 ALTER TRIGGER [ schema. ]
trigger_name
{ trigger_compile_clause
| { ENABLE | DISABLE }
| RENAME TO new_name
| { EDITIONABLE |
NONEDITIONABLE }
} ;
支持,有差异 GaussDB不支持
schema
trigger_compile_cl
ause{ ENABLE |
DISABLE }
{ EDITIONABLE |
NONEDITIONABL
E }
7-68 drop trigger
序号 Oracle数据库 GaussDB数据
差异
1 DROP
TRIGGER
[ schema. ]
trigger ;
支持,有差异
GaussDB不支持schema,需要在
trigger_name后面加上ON
table_name
Oracle数据库名为*_TRIGGERS的视图统计了trigger的相关信息,GaussDB相关视图与
Oracle存在差异,GaussDB视图具体请参见《开发指南》中”系统表和系统视图 >
统视图 > 其他系统视图”中的DB_TRIGGERSADM_TRIGGERSMY_TRIGGERS
节。
7-69 Nested, Package, and Standalone Subprograms 兼容性
序号
Oracle数据库 GaussDB数据库 差异
1 nested
subprogram(子
块)
支持,有差异
GaussDB不支持重载。
GaussDB不支持定义为自治事
务。
GaussDB不支持SETOF的使用,
仅限一个限定符引用嵌套子程序
或嵌套子程序的变量。
2 package
subprogram
支持 -
3 standalone
subprogram(包
Function &
Procedure
支持
-
4 匿名块 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 70
7-70 RETURN 语句支持情况
序号 Oracle数据库 GaussDB数据库
1 Function 支持
2 Procedure 支持
3 匿名块 支持
7-71 Function 相关参数
序号 Oracle数据库 GaussDB数据库 差异
1 DETERMINISTIC 支持,有差异 GaussDB中为
IMMUTABLE
2 PARALLEL_ENABLE 不支持 -
3 PIPELINED 不支持 -
4 RESULT_CACHE 不支持 -
7-72 参数形式支持
序号
Oracle数据库 GaussDB数据库
1 IN 支持
2 OUT 支持
3 IN OUT 支持
7-73 CREATE 语句
序号
Oracle数据库 GaussDB数据
差异
1 CREATE
FUNCTION
支持,有差异 GaussDB不支持IF NOT EXISTS语法、不
支持sharing_clause、仅支持部分指定
function属性的子句(属性的子句仅支持
invoker_rights_clause子句)、不支持关
键字[ EDITIONABLE |
NONEDITIONABLE ]
GaussDB的具体语法请参见《开发指
南》中“SQL参考 > SQL语法 > C
>CREATE FUNCTION”章节。
2 CREATE
LIBRARY
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 71
序号 Oracle数据库 GaussDB数据
差异
3 CREATE
PACKAGE
支持,有差异 GaussDB不支持IF NOT EXISTS语法、不
支持sharing_clause、仅支持部分指定
package属性的子句(属性的子句仅支持
invoker_rights_clause子句)、不支持关
键字[ EDITIONABLE |
NONEDITIONABLE ]
GaussDB的具体语法请参见《开发指
南》中“SQL参考 > SQL语法 > C
>CREATE PACKAGE”章节。
4 CREATE
PACKAGE
BODY
支持,有差异
GaussDB不支持IF NOT EXISTS语法、不
支持sharing_clause、不支持关键字
[ EDITIONABLE |
NONEDITIONABLE ]
GaussDB的具体语法请参见《开发指
南》中“SQL参考 > SQL语法 > C
>CREATE PACKAGE”章节。
5 CREATE
PROCEDURE
支持,有差异 GaussDB不支持IF NOT EXISTS语法、不
支持sharing_clause子句、不支持关键字
[ EDITIONABLE |
NONEDITIONABLE ]
GaussDB的具体语法请参见《开发指
南》中“SQL参考 > SQL语法 > C
>CREATE PROCEDURE”章节。
6 CREATE
TRIGGER
支持,有差异 GaussDB的具体语法请参见《开发指
南》中“SQL参考 > SQL语法 > C
>CREATE TRIGGER”章节。
7
CREATE TYPE 支持,有差异 GaussDB不支持varrayobject类型、
UNDER语法。
GaussDB的具体语法请参见《开发指
南》中“SQL参考 > SQL语法 > C
>CREATE TYPE”章节。
8
CREATE TYPE
BODY
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 72
7-74 ALTER 语句
序号 Oracle数据库 GaussDB数据
差异
1 ALTER
FUNCTION
支持,有差异 GaussDB不支持关键字[ EDITIONABLE |
NONEDITIONABLE ]REUSE
SETTINGSDEBUG
GaussDB的具体语法请参见《开发指
南》中“SQL参考 > SQL语法 > A >
ALTER FUNCTION”章节。
2 ALTER
LIBRARY
不支持 -
3 ALTER
PACKAGE
支持,有差异 GaussDB不支持关键字[ EDITIONABLE |
NONEDITIONABLE ]REUSE
SETTINGSDEBUG
GaussDB的具体语法请参见《开发指
南》中“SQL参考 > SQL语法 > A >
ALTER PACKAGE”章节。
4 ALTER
PROCEDURE
支持,有差异 GaussDB不支持关键字[ EDITIONABLE |
NONEDITIONABLE ]REUSE
SETTINGSDEBUG
5
ALTER
TRIGGER
支持,有差异 GaussDB仅支持修改trigger名字。
GaussDB的具体语法请参见《开发指
南》中“SQL参考 > SQL语法 > A >
ALTER TRIGGER”章节。
6
ALTER TYPE 支持,有差异 GaussDB仅支持部分语句。
GaussDB的具体语法请参见《开发指
南》中“SQL参考 > SQL语法 > A >
ALTER TYPE”章节。
7-75 DROP 语句
序号
Oracle数据库 GaussDB数据
差异
1 DROP
FUNCTION
支持 -
2 DROP
LIBRARY
不支持 -
3 DROP
PACKAGE
支持 -
4 DROP
PROCEDURE
支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 73
序号 Oracle数据库 GaussDB数据
差异
5 DROP
TRIGGER
支持,有差异 GaussDB的语法与Oracle不同。
GaussDB的具体语法请参见《开发指
南》中“SQL参考 > SQL语法 > D >
DROP TRIGGER”章节。
6
DROP TYPE 支持,有差异 GaussDB不支持关键字FORCE
VALIDATE
GaussDB的具体语法请参见《开发指
南》中“SQL参考 > SQL语法 > D >
DROP TYPE”章节。
7
DROP TYPE
BODY
不支持 -
7-76 FunctionProcedure、匿名块相关关键字
序号 Oracle数据库 GaussDB数据
差异
1 ACCESSIBLE
BY
不支持 -
2 AGGREGATE 支持,有差异
GaussDB不支持Oracleaggregate
using [schema.]
implementation_type用法。
GaussDB的具体用法请参见《开发指
南》中“SQL参考 > SQL语法 > C >
CREATE AGGREGATE”章节。
语法不同,但实现功能相同。
3 DETERMINIST
IC
支持,有差异 GaussDB仅在语法上支持关键字
DETERMINISTIC,未实现功能。
4 PIPE ROW 不支持 -
5 PIPELINED 不支持 -
6 SQL_MACRO 不支持 -
7 RESTRICT_REF
ERENCES
不支持 -
8 INLINE 不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 74
7-77 异常处理相关关键字
序号 Oracle数据库 GaussDB数据库 差异
1 EXCEPTION_INIT 支持,有差异 GaussDB不支持与
系统错误码进行绑
定。
2
Exception 支持 -
3 Exception Handler 支持 -
4 SQLCODE 支持 -
5 SQLERRM 支持 -
7-78 其他 PL/SQL 关键字
序号 Oracle数据库 GaussDB数据库 差异
1 COVERAGE 不支持 -
2 COLLATION 支持 -
3 DEPRECATE 不支持 -
4 FORALL 支持 -
5 NOCOPY 不支持 -
6 RETURNING 支持 -
7 SERIALLY_REUSAB
LE
不支持 -
8 SHARING 不支持 -
9 BULK COLLECT 支持 -
7.1.10 系统函数
兼容函数分为:单行函数、用户自定义函数、AGG函数、分析函数、对象引用函数、
模型函数、OLAP函数。
7.1.10.1 单行函数
序号
Oracle数据库函数 GaussDB数据库是否支持
1 数值函数 支持,有差异
2 返回字符值的字符函数 支持,有差异
3 返回数值的字符函数 支持,有差异
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 75
序号 Oracle数据库函数 GaussDB数据库是否支持
4 字符集函数 不支持
5 Collation函数 不支持
6 日期时间函数 支持,有差异
7 通用比较函数 支持,有差异
8 转换函数 支持,有差异
9 大对象函数 支持,有差异
10 集合函数 不支持
11 层次函数 支持
12 数据挖掘功能函数 不支持
13 XML类型函数 支持,有差异
14 JSON函数 不支持
15 编码解码函数 支持,有差异
16 空值相关的函数 支持
17 环境和标识符函数 支持,有差异
7-79 数值函数
序号
Oracle数据库
函数
GaussDB数据
库是否支持
差异
1 ABS 支持 -
2 ACOS 支持 -
3 ASIN 支持 -
4 ATAN 支持 -
5 ATAN2 支持 -
6 BITAND 支持 -
7 CEIL 支持 -
8 COS 支持 -
9 COSH 支持 -
10 EXP 支持 -
11 FLOOR 支持 -
12 LN 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 76
序号 Oracle数据库
函数
GaussDB数据
库是否支持
差异
13 LOG 支持 -
14 MOD 支持,有差异
返回类型不一致,Oracle数据库类型
包括BINARY_DOUBLE
BINARY_FLOATNUMBER
GaussDB返回类型包括int2int4
int8numeric
当两个入参中有一个是int类型时,另
一个参数必须为intnumeric类型或
字面值整数(无小数点的合法数字
如:‘12)
15 NANVL 支持,有差异 GaussDB不支持直接声明或浮点数除0
NaN
16 POWER 支持 -
17 REMAINDER 支持,有差异 返回值数据类型不同。
GaussDB
当一个输入是oat4时,另一个是
numeric时,返回oat4类型。
当两个输入都是oat4时,返回oat4
类型。
当两个输入都是oat8时,返回oat8
类型。
其他数据类型,返回numeric
Oracle
返回值类型是number
18 ROUND 支持,有差异
第一个参数noat类型,GaussDB
存在精度损失,比Oracle数据库精度
低。
返回类型不一致。round(n, integer)
形式,Oracle数据库NUMBER类型,
GaussDB返回numeric类型;
round(n)形式,Oracle数据库n的数
据类型,GaussDB只能返回oat8
numeric类型,缺少oat4返回类型。
GaussDB判断入参有null,执行框架
返回null的逻辑与Oracle数据库不一
致。
SELECT round(NULL,'q');
Oracle数据库nullGaussDB报错
invalid input syntax for integer:
"q"
19 SIGN 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 77
序号 Oracle数据库
函数
GaussDB数据
库是否支持
差异
20 SIN 支持 -
21 SINH 支持 -
22 SQRT 支持 -
23 TAN 支持 -
24 TANH 支持,有差异 返回值数据类型不同。
GaussDB
当输入是oat8时,返回oat8类型。
当输入是numeric时,返回numeric
型。
Oracle
返回值类型是number
25 TRUNC 支持 -
26 WIDTH_BUCK
ET
支持 -
7-80 返回字符值的字符函数
序号
Oracle数据
库函数
GaussDB数据库
是否支持
差异
1 CHR 支持,有差异
输入的数字不符合现有字符集时,在
JDBCGaussDB会报错,Oracle数据
库会返回乱码。
输入0256等时Oracle数据库会返回
Ascii码为0的字符,GaussDB会在'\0;
处截断。
2 CONCAT 支持 -
3 INITCAP 支持,有差异 返回值受限于数据库字符集,导致返回结
果与Oracle数据库不一致。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 78
序号 Oracle数据
库函数
GaussDB数据库
是否支持
差异
4 LOWER 支持,有差异
返回值类型不一致,Oracle数据库和输
入类型一致的数据类型。
对时间格式上隐式转换问题,输入时
间类型时,隐式转换为字符串再进行
lower操作。
SELECT LOWER(TO_DATE('2012-12-10','YYYY-
MM-DD'));
Oracle返回10-DEC-12GaussDB返回
2012-12-10 00:00:00
返回值受限于数据库字符集,导致返
回结果与Oracle数据库不一致。
5 LPAD 支持 -
6 LTRIM 支持,有差异 返回值类型不一致。
当输入为字符数据类型时,Oracle返回
VARCHAR2类型;输入为数据库创建时指
定的国家字符集时,Oracle返回
NVARCHAR2类型;输入为LOB类型时,
Oracle返回LOB类型,GaussDB返回TEXT
类型。
7 NCHR 支持,有差异
返回值字节长度与Oracle数据库不一
致。
返回值受限于数据库字符集,导致返
回结果与Oracle数据库不一致。
返回入参对应的字节数组时,单个字
节在[0x80-0xFF]范围,会返回“?”,
Oracle数据库返回“?”、或者不输
出、或者会报错。
8 NLS_LOWE
R
支持,有差异
返回值类型不同,输入为字符数据类
型时,Oracle返回VARCHAR2类型;
输入为LOB类型时,Oracle返回LOB
型,GaussDB返回TEXT类型。
nlsparam参数Oracle数据库还可以传
入除nls_sort外的其他参数种类而不报
错,GaussDB只支持nls_sort
返回值受限于数据库字符集,导致返
回结果与Oracle数据库不一致。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 79
序号 Oracle数据
库函数
GaussDB数据库
是否支持
差异
9 NLS_UPPER 支持,有差异
返回值类型不同,输入为字符数据类
型时,Oracle返回VARCHAR2类型;
输入为LOB类型时,Oracle返回LOB
型,GaussDB返回TEXT类型。
nlsparam参数Oracle数据库还可以传
入除nls_sort外的其他参数种类而不报
错,GaussDB只支持nls_sort
返回值受限于数据库字符集,导致返
回结果与Oracle数据库不一致。
10 NLSSORT 支持 -
11 REGEXP_RE
PLACE
支持,有差异
GaussDB入参source_char不支持
NCLOB类型。
入参match_param选项 'n' 含义有差
异:GaussDB 'n' 选项与 'm' 选项含
义相同,表示采用多行模式匹配;而
Oracle 表示 (.) 能匹配 '\n' 字符,没有
指定该选项时默认不能匹配 '\n'
符。GaussDB (.) 默认匹配 '\n'
项,不需要指定选项。
不同正则表达式匹配结果可能不一
致。
SELECT REGEXP_REPLACE('abc01234xyz', '(.*?)
(\d+)(.*)', '#', 'g') FROM DUAL;
Oracle报错,GaussDB返回
#####xyz
UTF-8编码字符集下中文输入时匹配
结果可能不一致。Oracle需要在GBK
符集实现中文字符串的正则表达式匹
配。
包含部分转义字符的正则表达式匹配
结果可能不一致。
SELECT REGEXP_REPLACE('abcabc', '\abc', '#',
'g') FROM DUAL;
Oracle报错,GaussDB返回abcabc
匹配规则受aformat_regexp_match
数影响,具体影响规格请参见《开发
指南》中“SQL参考 > 函数和操作符 >
字符处理函数和操作符”章节
REGEXP_REPLACE函数部分。
12
REGEXP_SU
BSTR
支持,有差异 匹配规则受aformat_regexp_match参数
影响,具体影响规格请参见《开发指南》
中“SQL参考 > 函数和操作符 > 字符处理
函数和操作符”章节REGEXP_SUBSTR
数部分。
13
REPLACE 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 80
序号 Oracle数据
库函数
GaussDB数据库
是否支持
差异
14 RPAD 支持 -
15 RTRIM 支持 -
16 SUBSTR 支持 -
17 TRANSLAT
E
支持 -
18 TRIM 支持 -
19 UPPER 支持,有差异
返回值类型不一致,Oracle数据库和输
入类型一致的数据类型,GaussDB
TEXT类型。
对时间格式上隐式转换问题,输入时
间类型时,隐式转换为字符串再进行
upper操作。
SELECT UPPER(TO_DATE('2012-12-10','YYYY-
MM-DD'));
Oracle返回10-DEC-12GaussDB返回
2012-12-10 00:00:00
返回值受限于数据库字符集,导致返
回结果与Oracle数据库不一致。
20 INSTRB 支持 -
7-81 返回数值的字符函数
序号
Oracle数据库
函数
GaussDB数据
库函数是否支
差异
1 ASCII 支持,有差异 返回值类型不同。Oracle数据库返回类
型为uint4GaussDBint4
2 INSTR 支持 -
3 LENGTH 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 81
序号 Oracle数据库
函数
GaussDB数据
库函数是否支
差异
4 REGEXP_COU
NT
支持,有差异
GaussDB入参source_char不支持
NCLOB类型。
入参match_param选项 'n' 含义有差
异:GaussDB 'n' 选项与 'm' 选项
含义相同,表示采用多行模式匹配;
Oracle 表示 (.) 能匹配 '\n' 字符,
没有指定该选项时默认不能匹配 '\n'
字符。GaussDB (.) 默认匹配 '\n'
选项,不需要指定选项。
不同正则表达式匹配结果可能不一
致。
UTF-8编码字符集下中文输入时匹
配结果可能不一致。Oracle需要在
GBK字符集实现中文字符串的正则表
达式匹配。
包含部分转义字符的正则表达式匹配
结果可能不一致。
匹配规则受aformat_regexp_match
数影响,具体影响规格请参见《开发
指南》中“SQL参考 > 函数和操作符
> 字符处理函数和操作符”章节
REGEXP_COUNT函数部分。
5
REGEXP_INST
R
支持,有差异 匹配规则受aformat_regexp_match参数
影响,具体影响规格请参见《开发指
南》中“SQL参考 > 函数和操作符 >
符处理函数和操作符”章节
REGEXP_INSTR函数部分。
7-82 日期时间函数
序号
Oracle数据库
函数
GaussDB数据库是否支
差异
1 ADD_MONTH
S
支持,有差异
公元后到公元前,GaussDB
会和Oracle数据库相差1年。
GaussDB的计算结果范围可
以到-4714年,Oracle数据库
只到-4713年。
2
CURRENT_DA
TE
支持,有差异 GaussDB不支持
nls_date_format参数设置时间
显示格式。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 82
序号 Oracle数据库
函数
GaussDB数据库是否支
差异
3 CURRENT_TI
MESTAMP
支持,有差异 Oracle数据库参数支持范围(0
~ 9)。
GaussDB支持范围(0 ~ 6),
微秒末位零不显示。
4
DBTIMEZONE 支持,有差异 GaussDB不支持自带tz
timestamp类型接口的调用。
5 EXTRACT 支持 -
6 LAST_DAY 支持,有差异 返回值类型不一致。
7 LOCALTIMEST
AMP
支持,有差异 Oracle数据库参数支持范围(0
~ 9)。
GaussDB支持范围(0 ~ 6),
微秒末位零不显示。
8
MONTHS_BET
WEEN
支持,有差异 入参类型不一致。
9 NEW_TIME 支持,有差异 new_time函数的第一个入参为
字面量时,字面量的格式以及函
数的返回值类型均与Oracle数据
库不一致。
10
NEXT_DAY 支持 -
11 NUMTODSIN
TERVAL
支持,有差异 GaussDB不支持dsinterval
型,暂时用interval兼容
dsinterval类型。
12
NUMTOYMIN
TERVAL
支持,有差异 GaussDB不支持yminterval
型,暂时用interval兼容
yminterval类型。
13
SESSIONTIME
ZONE
支持,有差异
赋值语法差异。GaussDB
set session time zone 8
Oraclealter session set
time_zone= '+08:00'
默认值差异。GaussDB为时
区名称形式如:PRCOracle
为偏移量形式,如:+08
00
14 SYS_EXTRACT
_UTC
支持 -
15 SYSDATE 支持,有差异 返回值类型不一致。
16 TO_CHAR 支持,有差异 fmt5’未在Oracle数据库文档
中,未适配。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 83
序号 Oracle数据库
函数
GaussDB数据库是否支
差异
17 TO_DSINTERV
AL
支持,有差异 GaussDB不支持dsinterval
型,暂时用interval兼容
dsinterval类型。
18
TO_TIMESTA
MP
支持,有差异 GaussDB毫秒计算只支持6位,
Oracle数据库支持9位。
19 TO_TIMESTA
MP_TZ
支持,有差异 GaussDBtimestamptz等价于
Oracle
timestampwithloacltimezone
缺少Oracle对应的timestamptz
类型。nls_date_language只支
ENGLISHAMERICAN两种语
言。
20 TO_YMINTER
VAL
支持,有差异 GaussDB不支持yminterval
型,暂时用interval兼容
yminterval类型。
21
TZ_OFFSET 支持,有差异 接收一个时区名称为入参的时
候,时区名称的类型比Oracle
据库要少。
7-83 通用比较函数
Oracle数据
库函数
GaussDB数据库
是否支持
差异
1 GREATEST 支持,有差异
GaussDB不支持NLS_SORT参数指定的
比较方式,只支持二进制比较。
GaussDB不支持多语种的表达式。
2
LEAST 支持,有差异
GaussDB不支持NLS_SORT参数指定的
比较方式,只支持二进制比较。
GaussDB不支持多语种的表达式。
7-84 转换函数
Oracle数据库
函数
GaussDB数据库
是否支持
差异
1 ASCIISTR 支持 -
2 CAST 支持,有差异
GaussDB不支持multiset子句。
GaussDB不支持nlsparam参数。
3
HEXTORAW 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 84
Oracle数据库
函数
GaussDB数据库
是否支持
差异
4 RAWTOHEX 支持 -
5 TO_BINARY_D
OUBLE
支持,有差异 GaussDB不支持nlsparam参数。
6 TO_BINARY_FL
OAT
支持,有差异 GaussDB不支持nlsparam参数。
7 TO_BLOB 支持,有差异
GaussDB不支持long raw类型。
GaussDB不支持blemime_type
类型。
8
TO_CLOB 支持 -
9 TO_DATE 支持,有差异
不支持多语种参数。
返回类型不一致。
缺少控制参数
NLS_DATE_FORMAT
部分format格式不支持。
fmt = 'j' 15821015日之前
Oracle数据库与GaussDB输出不一
致。
无分割符时,不保证与Oracle数据库
完全一致。如to_date(220725,
yymmdd)yy/rr按照固定长度
4解析,会解析为220725月,25
非法月份则会报错。
10 TO_MULTI_BYT
E
支持 -
11 TO_NCHAR 支持,有差异
GaussDB:将入参的类型转换为
text
Oracle:将入参的类型转换为国家字
符集(national character set)。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 85
Oracle数据库
函数
GaussDB数据库
是否支持
差异
12 TO_NUMBER 支持,有差异 Gauss不支持NLS_PARAM参数
GaussO*fmt选项差异点描述:
1$
Gauss不支持该fmt
2, (comma)
Gauss:,可以出现在fmt的任意位置
O*
format中,逗号只能出现在整数部
分,且不能出现在数字开头,在原数据
中可以在数字的开头位置
支持format中的逗号与原数据的逗号个
数和位置不一致,但最后一个逗号的位
置需一致
原数据和Format中的连续逗号,等同于
没有逗号。
当原数据中没有逗号时,format的最后
一个逗号后面的数字位数需与原数据相
等。
3B
GaussDB未实现该功能
4C
Gauss不支持NLS参数
5G
Gauss不支持NLS参数
6L
Gauss不支持NLS参数
7U
Gauss不支持NLS参数
8D
Gauss不支持NLS参数
9PR
Gauss:等同于S,返回负数
Oracle
返回<尖括号>中的负值。
返回带前导和尾随空格的正值。
限制:PR格式元素只能出现在数字格式
模型的最后一个位置。
10RN | rn
GaussDB未实现该功能
TM| TM9 | TMe
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 86
Oracle数据库
函数
GaussDB数据库
是否支持
差异
GaussDB未实现该功能
11V
GaussDB未实现该功能
12FM
Gauss当有fm时,允许format中的逗号
与原数据中多,不然需严格保持一致。
Oracle 返回值保留前后的空格
13EEEE
GaussDB未实现该功能
13 TO_SINGLE_BY
TE
支持 -
14 TREAT 支持,有差异 GaussDB不支持使用“.”操作符取值,
不支持转化为object类型。
15 UNISTR 支持,有差异 GaussDB只支持UTF-8编码,Oracle
据库支持UTF-8UTF-16编码。
7-85 大对象函数
序号
Oracle数据库
函数
GaussDB数据库是
否支持
差异
1 EMPTY_BLOB 支持 -
2 EMPTY_CLOB 支持,有差异 GaussDBCLOB类型不支持
Oracle数据库中的定位器概念。
7-86 层次函数
序号
Oracle数据库函数 GaussDB数据库是否支持
1 SYS_CONNECT_BY_PATH 不支持
7-87 XML 类型函数
序号
Oracle数据库
函数
GaussDB数据库
是否支持
差异
1 EXISTSNODE 支持,有差异 在入参有命名空间时,xpath和命名空
间都需要定义别名。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 87
序号 Oracle数据库
函数
GaussDB数据库
是否支持
差异
2 EXTRACTVAL
UE
支持,有差异 目前仅支持xpath1.0版本。
3 SYS_XMLAGG 支持,有差异 xmlagg的别名,可使用xmlagg代替。
4 XMLAGG 支持 -
5 XMLCOMME
NT
支持 -
6 XMLCONCAT 支持 -
7 XMLELEMEN
T
支持,有差异 xmlelementxmlattributesname
字段赋值为NULL时,行为与Oracle
一致。
xmlelementname字段赋值为
NULL时,结果显示name信息为
空,且不显示属性信息。
xmlattributesname字段赋值为
NULL时,不显示属性信息。
8 XMLEXISTS 支持,有差异 GaussDB入参为xml类型。
9 XMLFOREST 支持,有差异 GaussDB返回值为xml类型。
GaussDB不支持EVALNAME语法。
10
XMLPARSE 支持,有差异 GaussDB返回值为xml类型。
GaussDB不支持WELLFORMED语法。
11
XMLROOT 支持,有差异 GaussDB返回值为xml类型。
12 JSON_OBJECT 支持 -
13 XMLTABLE 支持,有差异 GaussDBxml中选取数据使用的为
XPath 1.0表达式,不支持声明默认命
名空间,不支持多组输入及取别名,
不支持省略传入数据的passing_clause
子句,不支持RETURNING SEQUENCE
BY REF子句和( SEQUENCE ) BY REF
子句。
14 GETSTRINGV
AL
支持 -
15 GETCLOBVAL 支持 -
16 XMLSEQUEN
CE
支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 88
7-88 编码解码函数
Oracle数据
库函数
GaussDB数据库
是否支持
差异
1 DECODE 支持 -
2 DUMP 支持,有差异 因存储格式不同,GaussDB数值和时间
类型返回结果和Oracle数据库不一致。
如,GaussDBselect dump(123); 返回
Typ=23 Len=4: 123,0,0,0Oracle
select dump(123) from dual; 返回
Typ=2 Len=3: 194,2,24
3
ORA_HASH 支持,有差异 GaussDB中有以下行为:
时间类型的入参转换成字符串类型再
进行hash
不支持maxbucket参数。
4
VSIZE 支持,有差异 因存储格式不同,GaussDB数值和时间
类型返回结果和Oracle数据库不一致。
GaussDBselect vsize(999); 返回4
Oracleselect vsize(999) from dual;
返回3
7-89 空值相关的函数
序号
Oracle数据库
函数
GaussDB数据库是
否支持
差异
1 COALESCE 支持 -
2 LNNVL 支持 -
3 NULLIF 支持 -
4 NVL 支持 -
5 NVL2 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 89
7-90 环境和标识符函数
序号 Oracle数据库
函数
GaussDB数据库是否
支持
差异
1 SYS_CONTEXT 支持,有差异 GaussDB对不支持的参数返
NULL
以下为不支持的参数列表:
'action'
'is_application_root'
'is_application_pdb'
'audited_cursorid'
'authenticated_identity'
'authentication_data'
'authentication_method'
'cdb_domain'
'cdb_name'
'client_identier'
'con_id'
'con_name'
'current_sql_length'
'db_domain'
'db_supplemental_log_le
vel'
'dblink_info'
'drain_status'
'entryid'
'enterprise_identity'
'fg_job_id'
'global_uid'
'identication_type'
'instance'
'is_dg_rolling_upgrade'
'ldap_server_type'
'module'
'network_protocol'
'nls_calendar'
'nls_sort'
'nls_territory'
'oracle_home'
'os_user'
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 90
序号 Oracle数据库
函数
GaussDB数据库是否
支持
差异
'platform_slash'
'policy_invoker'
'proxy_enterprise_identit
y'
'proxy_user'
'proxy_userid'
'scheduler_job'
'session_edition_id'
'session_edition_name'
'sessionid'
'statementid'
'terminal'
'unied_audit_sessionid'
'session_default_collation
'
'client_info'
'bg_job_id'
'client_program_name'
'current_bind'
'global_context_memory'
'host'
'current_sqln'
2
SYS_GUID 支持 -
3 USER 支持,有差异 返回值类型不一致。
7.1.10.2 其它函数
序号
Oracle数据库 GaussDB数据库
1 聚合函数 支持
2 分析函数 支持
3 对象引用函数 不支持
4 模型函数 不支持
5 OLAP函数 不支持
6 数据盒功能函数 不支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 91
序号 Oracle数据库 GaussDB数据库
7 关于用户定义的函数 支持
7-91 聚合函数
序号 Oracle数据库
函数
GaussDB数据库是否
支持
差异
1 AVG 支持 -
2 CORR 支持 -
3 COUNT 支持 -
4 COVAR_POP 支持 -
5 COVAR_SAMP 支持 -
6 CUME_DIST 支持 -
7 DENSE_RANK 支持 -
8 FIRST 支持 -
9 GROUPING 支持 -
10 LAST 支持 -
11 LISTAGG 支持 -
12 MAX 支持 -
13 MEDIAN 支持 -
14 MIN 支持 -
15 PERCENT_RA
NK
支持 -
16 PERCENTILE_
CONT
支持 -
17 RANK 支持 -
18 REGR_ (Linear
Regression)
支持 -
19 STDDEV 支持 -
20 STDDEV_POP 支持 -
21 STDDEV_SAM
P
支持 -
22 SUM 支持 -
23 VAR_POP 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 92
序号 Oracle数据库
函数
GaussDB数据库是否
支持
差异
24 VAR_SAMP 支持 -
25 VARIANCE 支持 -
26 WM_CONCAT 支持,有差异 Oracle通过WM_CONCAT
数把查询出来的多个行拼接
成一个字符串,GaussDB
STRING_AGGLISTAGG
函数都可以实现此功能。
差异点:
WM_CONCAT函数只支持一
个参数,即要合并的列名,
用逗号连接;STRING_AGG
LISTAGG函数需要两个参
数,第一个参数是要合并的
列名,第二个参数是分隔
符。
WM_CONCAT
STRING_AGG函数支持
distinct,不支持排序;
LISTAGG函数不支持
distinct,支持自定义排序。
7-92 分析函数
序号
Oracle数据库函数 GaussDB数据库是否支持
1 FIRST_VALUE 支持
2 LAG 支持
3 LAST_VALUE 支持
4 LEAD 支持
5 NTH_VALUE 支持
6 NTILE 支持
7 ROW_NUMBER 支持
8 RATIO_TO_REPORT 支持
7.1.11 系统视图
GaussDB数据库兼容了部分Oracle数据库的系统视图,兼容的详细列表如下。
更多系统视图的字段说明信息请参考《开发指南》中“系统视图”章节。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 93
7-93 系统视图支持列表
序号 Oracle数据库 GaussDB数据库
1 ALL_ALL_TABLES DB_ALL_TABLES
2 ALL_COL_PRIVS DB_COL_PRIVS
3 ALL_COLL_TYPES DB_COLL_TYPES
4 ALL_IND_COLUMNS DB_IND_COLUMNS
5 ALL_COL_COMMENTS DB_COL_COMMENTS
6 ALL_CONS_COLUMNS DB_CONS_COLUMNS
7 ALL_CONSTRAINTS DB_CONSTRAINTS
8 ALL_DEPENDENCIES DB_DEPENDENCIES
9 ALL_DIRECTORIES DB_DIRECTORIES
10 ALL_IND_EXPRESSIONS DB_IND_EXPRESSIONS
11 ALL_IND_PARTITIONS DB_IND_PARTITIONS
12 ALL_INDEXES DB_INDEXES
13 ALL_IND_SUBPARTITIONS DB_IND_SUBPARTITIONS
14 ALL_OBJECTS DB_OBJECTS
15 ALL_PART_COL_STATISTICS DB_PART_COL_STATISTICS
16 ALL_PART_KEY_COLUMNS DB_PART_KEY_COLUMNS
17 ALL_PART_TABLES DB_PART_TABLES
18 ALL_SCHEDULER_JOB_ARGS DB_SCHEDULER_JOB_ARGS
19 ALL_SCHEDULER_PROGRAM_AR
GS
DB_SCHEDULER_PROGRAM_AR
GS
20 ALL_SEQUENCES DB_SEQUENCES
21 ALL_SUBPART_KEY_COLUMNS DB_SUBPART_KEY_COLUMNS
22 ALL_SYNONYMS DB_SYNONYMS
23 ALL_TAB_COL_STATISTICS DB_TAB_COL_STATISTICS
24 ALL_TAB_COMMENTS DB_TAB_COMMENTS
25 ALL_TAB_HISTOGRAMS DB_TAB_HISTOGRAMS
26 ALL_TAB_STATS_HISTORY DB_TAB_STATS_HISTORY
27 ALL_TYPES DB_TYPES
28 ALL_PROCEDURES DB_PROCEDURES
29 ALL_SOURCE DB_SOURCE
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 94
序号 Oracle数据库 GaussDB数据库
30 ALL_TAB_COLUMNS DB_TAB_COLUMNS
31 ALL_TAB_PARTITIONS DB_TAB_PARTITIONS
32 ALL_TAB_SUBPARTITIONS DB_TAB_SUBPARTITIONS
33 ALL_TABLES DB_TABLES
34 ALL_TRIGGERS DB_TRIGGERS
35 ALL_USERS DB_USERS
36 ALL_VIEWS DB_VIEWS
37 DBA_AUDIT_OBJECT ADM_AUDIT_OBJECT
38 DBA_AUDIT_SESSION ADM_AUDIT_SESSION
39 DBA_AUDIT_STATEMENT ADM_AUDIT_STATEMENT
40 DBA_AUDIT_TRAIL ADM_AUDIT_TRAIL
41 DBA_COL_COMMENTS ADM_COL_COMMENTS
42 DBA_COL_PRIVS ADM_COL_PRIVS
43 DBA_COLL_TYPES ADM_COLL_TYPES
44 DBA_ARGUMENTS ADM_ARGUMENTS
45 DBA_CONSTRAINTS ADM_CONSTRAINTS
46 DBA_DATA_FILES ADM_DATA_FILES
47 DBA_CONS_COLUMNS ADM_CONS_COLUMNS
48 DBA_DEPENDENCIES ADM_DEPENDENCIES
49 DBA_DIRECTORIES ADM_DIRECTORIES
50 DBA_PART_COL_STATISTICS ADM_PART_COL_STATISTICS
51 DBA_PART_TABLES ADM_PART_TABLES
52 DBA_ROLE_PRIVS ADM_ROLE_PRIVS
53 DBA_ROLES ADM_ROLES
54 DBA_SCHEDULER_JOB_ARGS ADM_SCHEDULER_JOB_ARGS
55 DBA_SCHEDULER_PROGRAMS ADM_SCHEDULER_PROGRAMS
56 DBA_SCHEDULER_PROGRAM_A
RGS
ADM_SCHEDULER_PROGRAM_
ARGS
57 DBA_HIST_SNAPSHOT ADM_HIST_SNAPSHOT
58 DBA_HIST_SQL_PLAN ADM_HIST_SQL_PLAN
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 95
序号 Oracle数据库 GaussDB数据库
59 DBA_HIST_SQLSTAT ADM_HIST_SQLSTAT
60 DBA_HIST_SQLTEXT ADM_HIST_SQLTEXT
61 DBA_ILMDATAMOVEMENTPOLI
CIES
GS_ADM_ILMDATAMOVEMENT
POLICIES
62 DBA_ILMEVALUATIONDETAILS GS_ADM_ILMEVALUATIONDET
AILS
63 DBA_ILMOBJECTS GS_ADM_ILMOBJECTS
64 DBA_ILMPARAMETERS GS_ADM_ILMPARAMETERS
65 DBA_ILMPOLICIES GS_ADM_ILMPOLICIES
66 DBA_ILMRESULTS GS_ADM_ILMRESULTS
67 DBA_ILMTASKS GS_ADM_ILMTASKS
68 DBA_IND_COLUMNS ADM_IND_COLUMNS
69 DBA_IND_EXPRESSIONS ADM_IND_EXPRESSIONS
70 DBA_IND_PARTITIONS ADM_IND_PARTITIONS
71 DBA_INDEXES ADM_INDEXES
72 DBA_OBJECTS ADM_OBJECTS
73 DBA_PART_INDEXES ADM_PART_INDEXES
74 DBA_PROCEDURES ADM_PROCEDURES
75 DBA_SCHEDULER_JOBS ADM_SCHEDULER_JOBS
76 DBA_SCHEDULER_RUNNING_JO
BS
ADM_SCHEDULER_RUNNING_J
OBS
77 DBA_SEGMENTS ADM_SEGMENTS
78 DBA_SEQUENCES ADM_SEQUENCES
79 DBA_SOURCE ADM_SOURCE
80 DBA_IND_SUBPARTITIONS ADM_IND_SUBPARTITIONS
81 DBA_SUBPART_KEY_COLUMNS ADM_SUBPART_KEY_COLUMNS
82 DBA_SYS_PRIVS ADM_SYS_PRIVS
83 DBA_TAB_COL_STATISTICS ADM_TAB_COL_STATISTICS
84 DBA_TAB_HISTOGRAMS ADM_TAB_HISTOGRAMS
85 DBA_TAB_STATISTICS ADM_TAB_STATISTICS
86 DBA_TAB_STATS_HISTORY ADM_TAB_STATS_HISTORY
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 96
序号 Oracle数据库 GaussDB数据库
87 DBA_TABLESPACES ADM_TABLESPACES
88 DBA_TYPES ADM_TYPES
89 DBA_USERS ADM_USERS
90 DBA_SYNONYMS ADM_SYNONYMS
91 DBA_TAB_COLS ADM_TAB_COLS
92 DBA_TAB_COLUMNS ADM_TAB_COLUMNS
93 DBA_TAB_COMMENTS ADM_TAB_COMMENTS
94 DBA_TABLES ADM_TABLES
95 DBA_TAB_PARTITIONS ADM_TAB_PARTITIONS
96 DBA_TAB_SUBPARTITIONS ADM_TAB_SUBPARTITIONS
97 DBA_TRIGGERS ADM_TRIGGERS
98 DBA_TYPE_ATTRS ADM_TYPE_ATTRS
99 DBA_VIEWS ADM_VIEWS
100 ROLE_ROLE_PRIVS ROLE_ROLE_PRIVS
101 ROLE_SYS_PRIVS ROLE_SYS_PRIVS
102 ROLE_TAB_PRIVS ROLE_TAB_PRIVS
103 USER_COL_COMMENTS MY_COL_COMMENTS
104 USER_COL_PRIVS MY_COL_PRIVS
105 USER_COLL_TYPES MY_COLL_TYPES
106 USER_CONSTRAINTS MY_CONSTRAINTS
107 USER_DEPENDENCIES MY_DEPENDENCIES
108 DICT DICT
109 DICTIONARY DICTIONARY
110 DUAL DUAL
111 NLS_DATABASE_PARAMETERS NLS_DATABASE_PARAMETERS
112 NLS_INSTANCE_PARAMETERS NLS_INSTANCE_PARAMETERS
113 PLAN_TABLE PLAN_TABLE
114 USER_ILMDATAMOVEMENTPOL
ICIES
GS_MY_ILMDATAMOVEMENTP
OLICIES
115 USER_ILMEVALUATIONDETAILS GS_MY_ILMEVALUATIONDETAI
LS
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 97
序号 Oracle数据库 GaussDB数据库
116 USER_ILMOBJECTS GS_MY_ILMOBJECTS
117 USER_ILMPOLICIES GS_MY_ILMPOLICIES
118 USER_ILMRESULTS GS_MY_ILMRESULTS
119 USER_ILMTASKS GS_MY_ILMTASKS
120 USER_IND_COLUMNS MY_IND_COLUMNS
121 USER_IND_EXPRESSIONS MY_IND_EXPRESSIONS
122 USER_IND_PARTITIONS MY_IND_PARTITIONS
123 USER_IND_SUBPARTITIONS MY_IND_SUBPARTITIONS
124 USER_INDEXES MY_INDEXES
125 USER_JOBS MY_JOBS
126 USER_OBJECTS MY_OBJECTS
127 USER_PART_COL_STATISTICS MY_PART_COL_STATISTICS
128 USER_PART_INDEXES MY_PART_INDEXES
129 USER_PART_TABLES MY_PART_TABLES
130 USER_PROCEDURES MY_PROCEDURES
131 USER_SCHEDULER_JOB_ARGS MY_SCHEDULER_JOB_ARGS
132 USER_SCHEDULER_PROGRAM_
ARGS
MY_SCHEDULER_PROGRAM_AR
GS
133 USER_SEQUENCES MY_SEQUENCES
134 USER_SOURCE MY_SOURCE
135 USER_SUBPART_KEY_COLUMNS MY_SUBPART_KEY_COLUMNS
136 USER_SYNONYMS MY_SYNONYMS
137 USER_SYS_PRIVS MY_SYS_PRIVS
138 USER_TAB_COL_STATISTICS MY_TAB_COL_STATISTICS
139 USER_TAB_COLUMNS MY_TAB_COLUMNS
140 USER_TAB_COMMENTS MY_TAB_COMMENTS
141 USER_TAB_HISTOGRAMS MY_TAB_HISTOGRAMS
142 USER_TAB_PARTITIONS MY_TAB_PARTITIONS
143 USER_TAB_STATISTICS MY_TAB_STATISTICS
144 USER_TAB_STATS_HISTORY MY_TAB_STATS_HISTORY
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 98
序号 Oracle数据库 GaussDB数据库
145 USER_TABLES MY_TABLES
146 USER_TABLESPACES MY_TABLESPACES
147 USER_TRIGGERS MY_TRIGGERS
148 USER_TYPE_ATTRS MY_TYPE_ATTRS
149 USER_TYPES MY_TYPES
150 USER_VIEWS MY_VIEWS
151 V$NLS_PARAMETERS V$NLS_PARAMETERS
152 V$SESSION_WAIT V$SESSION_WAIT
153 V$SYSSTAT V$SYSSTAT
154 V$SYSTEM_EVENT V$SYSTEM_EVENT
155 V$VERSION V$VERSION
156 V$INSTANCE V_INSTANCE
157 GV$INSTANCE GV_INSTANCE
158 V$MYSTAT V_MYSTAT
159 V$SESSION V_SESSION
160 GV$SESSION GV_SESSION
161 V$SESSION_LONGOPS DV_SESSION_LONGOPS
162 V$SESSION DV_SESSIONS
163 ALL_ARGUMENTS DB_ARGUMENTS
164 USER_CONS_COLUMNS MY_CONS_COLUMNS
165 USER_PART_KEY_COLUMNS MY_PART_KEY_COLUMNS
166 USER_ROLE_PRIVS MY_ROLE_PRIVS
167 DBA_TAB_PRIVS ADM_TAB_PRIVS
168 USER_SCHEDULER_JOBS MY_SCHEDULER_JOBS
169 V$LOCK V$LOCK
170 V$DBLINK V$DBLINK
171 V$GLOBAL_TRANSACTION V$GLOBAL_TRANSACTION
172 V$OPEN_CURSOR V$OPEN_CURSOR
173 V$GLOBAL_OPEN_CURSOR V$GLOBAL_OPEN_CURSOR
174 ALL_TAB_PRIVS DB_TAB_PRIVS
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 99
序号 Oracle数据库 GaussDB数据库
175 ALL_TAB_MODIFICATIONS DB_TAB_MODIFICATIONS
176 USER_TAB_MODIFICATIONS MY_TAB_MODIFICATIONS
177 USER_AUDIT_TRAIL MY_AUDIT_TRAIL
7.1.12 高级包
GaussDB数据库兼容了部分Oracle数据库的高级包,兼容的详细列表如下。
更多高级包信息请参考开发指南中高级包章节。
7-94 高级包支持列表
序号 Oracle数据库 GaussDB数据库 差异
1 DBMS_LOB DBE_LOB GaussDB具体用法请参见《开发
指南》在“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_LOB”章节。
2
DBMS_RANDOM DBE_RANDOM GaussDB具体用法请参见《开发
指南》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_RANDOM”章节。
3
DBMS_OUTPUT DBE_OUTPUT GaussDB具体用法请参见《开发
指南》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_OUTPUT”章节。
4
UTL_RAW DBE_RAW GaussDB具体用法请参见《开发
指南》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_RAW”章节。
5
DBMS_SCHEDUL
ER
DBE_SCHEDULER GaussDB具体用法请参见《开发
指南》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_SCHEDULER”章节。
6
DBMS_UTILITY DBE_UTILITY GaussDB具体用法请参见《开发
指南》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_UTILITY”章节。
7
DBMS_SQL DBE_SQL GaussDB具体用法请参见《开发
指南》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_SQL”章节。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 100
序号 Oracle数据库 GaussDB数据库 差异
8 UTL_FILE DBE_FILE GaussDB具体用法请参见《开发
指南》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_FILE”章节。
9
DBMS_SESSION DBE_SESSION GaussDB具体用法请参见《开发
指南》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_SESSION”章节。
10
UTL_MATCH DBE_MATCH GaussDB具体用法请参见《开发
指南》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_MATCH”章节。
11
DBMS_APPLICATI
ON_INFO
DBE_APPLICATIO
N_INFO
GaussDB具体用法请参见《开发
指南》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_APPLICATION_INFO”章
节。
12
DBMS_XMLDOM DBE_XMLDOM GaussDB中具体请参见《开发指
》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_XMLDOM”章节。
13
DBMS_XMLPARS
ER
DBE_XMLPARSER GaussDB中具体请参见《开发指
》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_XMLPARSER”章节。
14
DBMS_ILM DBE_ILM GaussDB中具体请参见《开发指
》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_ILM”章节。
15
DBMS_ILM_ADMI
N
DBE_ILM_ADMIN GaussDB中具体请参见《开发指
》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_ILM_ADMIN”章节。
16
DBMS_COMPRES
SION
DBE_COMPRESSI
ON
GaussDB中具体请参见《开发指
》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_COMPRESSION”章节。
17
DBMS_HEAT_MA
P
DBE_HEAT_MAP GaussDB中具体请参见《开发指
》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_HEAT_MAP”章节。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 101
序号 Oracle数据库 GaussDB数据库 差异
18 DBMS_DESCRIBE DBE_DESCRIBE GaussDB中具体请参见《开发指
》中“存储过程 > 高级包 >
二次封装接口(推荐)”>
DBE_DESCRIPBE”章节。
19
DBMS_XMLGEN DBE_XMLGEN GaussDB中具体请参见《开发指
》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_XMLGEN”章节。
20
DBMS_STATS DBE_STATS GaussDB中具体请参见《开发指
》中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
7-95 DBMS_LOB 兼容性说明
序号 Oracle数据库 GaussDB数据库 差异
1 APPEND
Procedures
APPEND
Procedures
-
2 CLOB2FILE
Procedure
不支持 -
3 CLOSE Procedure BFILECLOSE
Procedure
GaussDB:参数类型为BFILE
不存在函数重载。
Oracle:该过程存在3个重载,3
个重载的参数lob_loclob_loc
le_loc的类型分别为BLOB
CLOB CHARACTER SET
ANY_CSBFILE
4 COMPARE
Functions
COMPARE
Functions
GaussDB:存在3个重载函数,
对于第三个参数(len)均为
BIGINT
Oracle:存在3个重载函数,对
于第三个参数(amount)均为
INTEGER
5 CONVERTTOBLOB
Procedure
LOB_CONVERTTO
BLOB Procedure
GaussDB:该过程共有5个参
数,且第345个参数类型为
BIGINT
Oracle:该过程共有8个参数,
GaussDB所有参数的基础上增
加了blob_csidlang_context
warning3个参数,类型分别为
NUMBERINTEGER
INTEGER,且第345个参数
类型为INTEGER
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 102
序号 Oracle数据库 GaussDB数据库 差异
6 CONVERTTOCLOB
Procedure
LOB_CONVERTTO
CLOB Procedure
GaussDB:该过程共有5个参
数。第345个参数类型为
BIGINT
Oracle:该过程共有8个参数。
345个参数类型为
INTEGEROracle的该过程在
GaussDB所有参数的基础上增加
3个参数:blob_csid
lang_contextwarning,参数
类型分别为NUMBER
INTEGERINTEGER
7 COPY Procedures LOB_COPY
Functions
-
8 COPY_DBFS_LINK
Procedures
不支持 -
9 COPY_FROM_DBF
S_LINK
不支持 -
10 CREATETEMPOrac
leRY Procedures
CREATE_TEMPOra
cleRY Procedures
GaussDB:该过程存在2个重
载。第一个重载过程的第一个参
数(lob_loc)为BLOB,第二个
重载过程的第一个参数
lob_loc)为CLOB;两个重载
过程的第三个参数(dur)为
INTEGER,默认值为10
Oracle:该过程存在2个重载。
第一个重载过程的第一个参数
lob_loc)为BLOB,第二个重
载过程的第一个参数
lob_loc)为CLOB;两个重载
过程的第三个参数(dur)的参
数类型为PLS_INTEGER,第一个
重载过程的dur默认值为
DBMS_LOB.SESSION,第二个
重载过程的dur默认值为10
11 DBFS_LINK_GENE
RATE_PATH
Functions
不支持
-
12 ERASE Procedures LOB_ERASE
Procedures
-
13 FILECLOSE
Procedure
不支持 -
14 FILECLOSEALL
Procedure
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 103
序号 Oracle数据库 GaussDB数据库 差异
15 FILEEXISTS
Function
不支持 -
16 FILEGETNAME
Procedure
不支持 -
17 FILEISOPEN
Function
不支持 -
18 FILEOPEN
Procedure
不支持 -
19 FRAGMENT_DELE
TE Procedure
不支持 -
20 FRAGMENT_INSE
RT Procedures
不支持 -
21 FRAGMENT_MOV
E Procedure
不支持 -
22 FRAGMENT_REPL
ACE Procedures
不支持 -
23 FREETEMPOracleR
Y Procedures
不支持 -
24 GET_DBFS_LINK
Functions
不支持 -
25 GET_DBFS_LINK_S
TATE Procedures
不支持 -
26 GETCHUNKSIZE
Functions
GETCHUNKSIZE
Functions
-
27 GETCONTENTTYP
E Functions
不支持 -
28 GETLENGTH
Functions
不支持 -
29 GETOPTIONS
Functions
不支持 -
30 GET_STOracleGE_
LIMIT Function
不支持 -
31 INSTR Functions MATCH Functions GaussDB:存在3个重载函数。
3个重载函数的第三、四个参数
均为BIGINT
Oracle:存在3个重载函数。3
重载函数的第三、四个参数均为
INTEGER
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 104
序号 Oracle数据库 GaussDB数据库 差异
32 ISOPEN Functions 不支持 -
33 ISREMOTE
Function
不支持 -
34 ISSECUREFILE
Function
不支持 -
35 ISTEMPOracleRY
Functions
不支持 -
36 LOADBLOBFROM
FILE Procedure
LOADBLOBFROM
FILE Procedure
-
37 LOADCLOBFROM
FILE Procedure
LOADCLOBFROM
FILE Procedure
-
38 LOADFROMFILE
Procedure
LOADFROMFILE
Procedure
-
39 MOVE_TO_DBFS_
LINK Procedures
不支持 -
40 OPEN Procedures BFILEOPEN
Procedure
GaussDB:该过程不存在重载。
第一个参数(ble)类型为
DBE_LOB.BFILE,第二个参数
open_mode)类型为TEXT
且只支持read模式。
Oracle:该过程存在3个重载。
第一个重载过程的第一个参数
lob_loc)类型为NOCOPY
BLOB,第二个参数
openmode)类型为
BINARY_INTEGER;第二个重载
过程的第一个参数(lob_loc
类型为NOCOPY CLOB
CHARACTER SET ANY_CS,第
二个参数(openmode)类型为
BINARY_INTEGER;第三个重载
过程的第一个参数(le_loc
类型为NOCOPY BFILE,第二个
参数(openmode)类型为
BINARY_INTEGER,且只能为
le_readonly
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 105
序号 Oracle数据库 GaussDB数据库 差异
41 READ Procedures READ Procedures GaussDB:该过程存在2个重
载。
Oracle:该过程存在3个重载。
其中前两个重载与GaussDB无差
异,第三个过程重载包括4个参
数:le_locamountoset
buer,其类型分别为
BFILENOCOPY INTEGER
INTEGERRAW
42 SET_DBFS_LINK
Procedures
不支持 -
43 SETCONTENTTYP
E Procedure
不支持 -
44 SETOPTIONS
Procedures
不支持 -
45 SUBSTR Functions LOB_SUBSTR
Functions
-
46 TRIM Procedures STRIP Functions GaussDB:该过程存在2个重
载。两个重载过程的第二个参数
newlen)均为BIGINT
Oracle:该过程存在2个重载。
两个重载过程的第二个参数
newlen)均为INTEGER
47 WRITE Procedures WRITE Functions -
48 WRITEAPPEND
Procedures
WRITEAPPEND
Functions
-
7-96 DBMS_RANDOM 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 INITIALIZE
Procedure
不支持 -
2 NORMAL
Function
不支持 -
3 RANDOM
Function
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 106
序号 Oracle数据库 GaussDB数据库 差异
4 SEED Procedures DBE_RANDOM.SE
T_SEED Function
GaussDB:该函数无重载,参数
类型为INTEGER
Oracle:该过程存在2个重载,2
个重载过程的参数类型分别为
VARCHAR2
BINARY_INTEGER
5 STRING Function 不支持 -
6 TERMINATE
Procedure
不支持 -
7 VALUE Functions DBE_RANDOM.GE
T_VALUE Function
GaussDB:该函数无重载。
Oracle:存在无参数的VALUE
数重载,返回NUMBER类型。
7-97 DBMS_OUTPUT 兼容性说明
序号 Oracle数据库 GaussDB数据库 差异
1 DISABLE
Procedure
DISABLE Function -
2 ENABLE
Procedure
ENABLE Function -
3 GET_LINE
Procedure
GET_LINE
Function
GaussDB:该函数无重载,首个
参数(lines)数据类型为
VARCHAR[]
Oracle:该过程存在2个重载,2
个重载过程的首个参数(lines
分别为CHARARR
DBMSOUTPUT_LINESARRAY
4 GET_LINES
Procedure
GET_LINES
Function
-
5 NEW_LINE
Procedure
NEW_LINE
Function
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 107
序号 Oracle数据库 GaussDB数据库 差异
6 PUT Procedure PUT Function GaussDB:当数据库服务端字符
server_encoding不是UTF8
码格式且入参的字符编码是合法
UTF8编码时,该函数不会区
分入参的数据类型,都会先把该
字符编码按照“UTF8 >
server_encoding”的转换关系
进行转换后再输出。
Oracle:当数据库服务端字符集
server_encoding不是UTF8编码
格式且入参的字符编码是合法的
UTF8编码时,若入参类型是
NVARCHAR2,则该过程会先把
该字符编码按照“UTF8 >
server_encoding”的转换关系
进行转换后再输出;若入参为其
他字符类型,则会将该字符编码
视作非法字符,以占位符的形式
输出。
7 PUT_LINE
Procedure
PUT_LINE
Function
GaussDB:当数据库服务端字符
server_encoding不是UTF8
码格式且入参的字符编码是合法
UTF8编码时,该函数不会区
分入参的数据类型,都会先把该
字符编码按照“UTF8 >
server_encoding”的转换关系
进行转换后再输出。
Oracle:当数据库服务端字符集
server_encoding不是UTF8编码
格式且入参的字符编码是合法的
UTF8编码时,若入参类型是
NVARCHAR2,则该过程会先把
该字符编码按照“UTF8 >
server_encoding”的转换关系
进行转换后再输出;若入参为其
他字符类型,则会将该字符编码
视作非法字符,以占位符的形式
输出。
7-98 UTL_RAW 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 BIT_AND
Function
BIT_AND Function -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 108
序号 Oracle数据库 GaussDB数据库 差异
2 BIT_COMPLE
MENT
Function
BIT_COMPLEMENT
Function
-
3 BIT_OR
Function
BIT_OR Function GaussDB:两个参数类型被定
义为TEXT类型并且返回TEXT
型。
Oracle:两个参数为RAW类型
并且返回RAW类型。
4
BIT_XOR
Function
BIT_XOR Function -
5 CAST_FROM_
BINARY_DOU
BLE Function
CAST_FROM_BINARY_
DOUBLE_TO_RAW
Function
-
6 CAST_FROM_
BINARY_FLOA
T Function
CAST_FROM_BINARY_
FLOAT_TO_RAW
Function
GaussDB:参数nFLOAT4
型。
Oracle:参数nFLOAT类型。
7
CAST_FROM_
BINARY_INTE
GER Function
CAST_FROM_BINARY_I
NTEGER_TO_RAW
Function
GaussDB:参数valueBIGINT
类型。
Oracle:参数valueINTEGER
类型。
8
CAST_FROM_
NUMBER
Function
CAST_FROM_NUMBER
_TO_RAW Function
GaussDB:参数nNUMERIC
类型
Oracle:参数nNUMBER
型。
9
CAST_TO_BIN
ARY_DOUBLE
Function
CAST_FROM_RAW_TO
_BINARY_DOUBLE
Function
-
10 CAST_TO_BIN
ARY_FLOAT
Function
CAST_FROM_RAW_TO
_BINARY_FLOAT
Function
GaussDB:函数返回类型为
FLOAT4
Oracle:函数返回类型为
FLOAT
11
CAST_TO_BIN
ARY_INTEGER
Function
CAST_FROM_RAW_TO
_BINARY_INTEGER
Function
GaussDB:参数endianess
INTEGER类型,函数返回类型
INTEGER
Oracle:参数endianess
PLS_INTEGER类型,函数返回
类型为BINARY_INTEGER
12 CAST_TO_NU
MBER
Function
CAST_FROM_RAW_TO
_NUMBER Function
GaussDB:函数返回类型为
NUMERIC
Oracle:函数返回类型为
NUMBER
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 109
序号 Oracle数据库 GaussDB数据库 差异
13 CAST_TO_NV
ARCHAR2
Function
CAST_FROM_RAW_TO
_NVARCHAR2
Function
-
14 CAST_TO_RA
W Function
CAST_FROM_VARCHA
R2_TO_RAW Function
-
15 CAST_TO_VAR
CHAR2
Function
CAST_TO_VARCHAR2
Function
-
16 COMPARE
Function
COMPARE Function GaussDB:函数返回类型为
INTEGER
Oracle:函数返回类型为
NUMBER
17
CONCAT
Function
CONCAT Function -
18 CONVERT
Function
CONVERT Function -
19 COPIES
Function
COPIES Function GaussDB:参数nNUMERIC
类型。
Oracle:参数nNUMBER
型。
20
LENGTH
Function
GET_LENGTH Function -
21 OVERLAY
Function
OVERLAY Function -
22 REVERSE
Function
REVERSE Function -
23 SUBSTR
Function
SUBSTR Function GaussDB:参数lob_locBLOB
类型;参数o_setINTEGER
类型,默认值为1;参数
amountINTEGER类型,默认
值为32767
Oracle:参数rRAW类型,参
posBINARY_INTEGER类型
且无默认值,参数len
BINARY_INTEGER类型,默认
值为NULL
24 TRANSLATE
Function
TRANSLATE Function -
25 TRANSLITERA
TE Function
TRANSLITERATE
Function
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 110
序号 Oracle数据库 GaussDB数据库 差异
26 XRANGE
Function
XRANGE Function GaussDB:参数start_byte
end_byte无默认值。
Oracle:参数start_byte
end_byte默认为NULL
7-99 DBMS_SCHEDULER 兼容性说明
序号 Oracle数据库 GaussDB数据库
1 ADD_EVENT_QUEUE_SUBSCRIBE
R Procedure
不支持
2 ADD_GROUP_MEMBER
Procedure
不支持
3 ADD_JOB_EMAIL_NOTIFICATION
Procedure
不支持
4 ADD_TO_INCOMPATIBILITY
Procedure
不支持
5 ALTER_CHAIN Procedure 不支持
6 ALTER_RUNNING_CHAIN
Procedure
不支持
7 CLOSE_WINDOW Procedure 不支持
8 COPY_JOB Procedure 不支持
9 CREATE_CHAIN Procedure 不支持
10 CREATE_CREDENTIAL Procedure CREATE_CREDENTIAL
Procedure
11 CREATE_DATABASE_DESTINATI
ON Procedure
不支持
12 CREATE_EVENT_SCHEDULE
Procedure
不支持
13 CREATE_FILE_WATCHER
Procedure
不支持
14 CREATE_GROUP Procedure 不支持
15 CREATE_INCOMPATIBILITY
Procedure
不支持
16 CREATE_JOB Procedure CREATE_JOB Procedure
17 CREATE_JOB_CLASS Procedure CREATE_JOB_CLASS
Procedure
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 111
序号 Oracle数据库 GaussDB数据库
18 CREATE_JOBS Procedure 不支持
19 CREATE_PROGRAM Procedure CREATE_PROGRAM
Procedure
20 CREATE_RESOURCE Procedure 不支持
21 CREATE_SCHEDULE Procedure CREATE_SCHEDULE
Procedure
22 CREATE_WINDOW Procedure 不支持
23 DEFINE_ANYDATA_ARGUMENT
Procedure
不支持
24 DEFINE_CHAIN_EVENT_STEP
Procedure
不支持
25 DEFINE_CHAIN_RULE Procedure 不支持
26 DEFINE_CHAIN_STEP Procedure 不支持
27 DEFINE_METADATA_ARGUMENT
Procedure
不支持
28 DEFINE_PROGRAM_ARGUMENT
Procedure
DEFINE_PROGRAM_ARGU
MENT Procedure
29 DISABLE Procedure DISABLE Procedure
30 DROP_AGENT_DESTINATION
Procedure
不支持
31 DROP_CHAIN Procedure 不支持
32 DROP_CHAIN_RULE Procedure 不支持
33 DROP_CHAIN_STEP Procedure 不支持
34 DROP_CREDENTIAL Procedure DROP_CREDENTIAL
Procedure
35 DROP_DATABASE_DESTINATION
Procedure
不支持
36 DROP_FILE_WATCHER Procedure 不支持
37 DROP_GROUP Procedure 不支持
38 DROP_INCOMPATIBILITY
Procedure
不支持
39 DROP_JOB Procedure DROP_JOB Procedure
40 DROP_JOB_CLASS Procedure DROP_JOB_CLASS
Procedure
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 112
序号 Oracle数据库 GaussDB数据库
41 DROP_PROGRAM Procedure DROP_PROGRAM
Procedure
42 DROP_PROGRAM_ARGUMENT
Procedure
不支持
43 DROP_SCHEDULE Procedure DROP_SCHEDULE
Procedure
44 DROP_WINDOW Procedure 不支持
45 ENABLE Procedure ENABLE Procedure
46 END_DETACHED_JOB_RUN
Procedure
不支持
47 EVALUATE_CALENDAR_STRING
Procedure
EVALUATE_CALENDAR_ST
RING Procedure
48 EVALUATE_RUNNING_CHAIN
Procedure
不支持
49 GENERATE_JOB_NAME Function GENERATE_JOB_NAME
Function
50 GET_AGENT_INFO Function 不支持
51 GET_AGENT_VERSION Function 不支持
52 GET_ATTRIBUTE Procedure 不支持
53 GET_FILE Procedure 不支持
54 GET_SCHEDULER_ATTRIBUTE
Procedure
不支持
55 OPEN_WINDOW Procedure 不支持
56 PURGE_LOG Procedure 不支持
57 PUT_FILE Procedure 不支持
58 REMOVE_EVENT_QUEUE_SUBSC
RIBER Procedure
不支持
59 REMOVE_FROM_INCOMPATIBILI
TY Procedure
不支持
60 REMOVE_GROUP_MEMBER
Procedure
不支持
61 REMOVE_JOB_EMAIL_NOTIFICA
TION Procedure
不支持
62 RESET_JOB_ARGUMENT_VALUE
Procedure
不支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 113
序号 Oracle数据库 GaussDB数据库
63 RUN_CHAIN Procedure 不支持
64 RUN_JOB Procedure RUN_JOB Procedure
65 SET_AGENT_REGISTRATION_PAS
S Procedure
不支持
66 SET_ATTRIBUTE Procedure SET_ATTRIBUTE
Procedure
67 SET_ATTRIBUTE_NULL
Procedure
不支持
68 SET_JOB_ANYDATA_VALUE
Procedure
不支持
69 SET_JOB_ARGUMENT_VALUE
Procedure
SET_JOB_ARGUMENT_VAL
UE Procedure
70 SET_JOB_ATTRIBUTES Procedure 不支持
71 SET_RESOURCE_CONSTRAINT
Procedure
不支持
72 SET_SCHEDULER_ATTRIBUTE
Procedure
不支持
73 STOP_JOB Procedure STOP_JOB Procedure
7-100 DBMS_UTILITY 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 ACTIVE_INSTANCES
Procedure
不支持 -
2 ANALYZE_DATABASE
Procedure
不支持 -
3 ANALYZE_PART_OBJECT
Procedure
不支持 -
4 ANALYZE_SCHEMA
Procedure
不支持 -
5 CANONICALIZE
Procedure
CANONICALIZE
Procedure
GaussDB:参数
canon_len默认为
1024字节。
Oracle:参数
canon_len无默认
值。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 114
序号 Oracle数据库 GaussDB数据库 差异
6 COMMA_TO_TABLE
Procedures
COMMA_TO_TABLE
Procedures
GaussDB:参数tab
VARCHAR2
组。
Oracle:该过程存
2个重载。参数
tab可以为两种类型
之一:一种为
uncl_array,另一种
lname_array
7 COMPILE_SCHEMA
Procedure
不支持 -
8 CREATE_ALTER_TYPE_ER
ROR_TABLE Procedure
不支持 -
9 CURRENT_INSTANCE
Function
不支持 -
10 DATA_BLOCK_ADDRESS_
BLOCK Function
不支持 -
11 DATA_BLOCK_ADDRESS_
FILE Function
不支持 -
12 DB_VERSION Procedure DB_VERSION
Procedure
GaussDB:只有参
version,类型为
VARCHAR2
Oracle:有参数
version
compatibility,类
型均为
VARCHAR2
13 EXEC_DDL_STATEMENT
Procedure
EXEC_DDL_STATEM
ENT Function
GaussDB:参数
parse_stringTEXT
类型。
Oracle:参数
parse_string
VARCHAR2类型。
14 EXPAND_SQL_TEXT
Procedure
EXPAND_SQL_TEXT
Function
GaussDB 参数
output_sql_text
CLOB
Oracle:参数
output_sql_text
NOCOPY CLOB,通
过传引用方式传递
OUT参数。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 115
序号 Oracle数据库 GaussDB数据库 差异
15 FORMAT_CALL_STACK
Function
FORMAT_CALL_STA
CK Function
GaussDB:函数返
回类型为TEXT
Oracle:函数返回
类型为
VARCHAR2
16
FORMAT_ERROR_BACKT
RACE Function
FORMAT_ERROR_B
ACKTRACE Function
GaussDB:函数返
回类型为TEXT
Oracle:函数返回
类型为
VARCHAR2
17
FORMAT_ERROR_STACK
Function
FORMAT_ERROR_S
TACK Function
GaussDB:函数返
回类型为TEXT
Oracle:函数返回
类型为
VARCHAR2
18
GET_CPU_TIME Function GET_CPU_TIME
Function
GaussDB:函数返
回类型为BIGINT
Oracle:函数返回
类型为NUMBER
19
GET_DEPENDENCY
Procedure
不支持 -
20 GET_ENDIANNESS
Function
GET_ENDIANNESS
Function
GaussDB:函数返
回类型为
INTEGER
Oracle:函数返回
类型为NUMBER
21
GET_HASH_VALUE
Function
GET_HASH_VALUE
Function
GaussDB:参数
basehash_size
返回类型均为
INTEGER
Oracle:参数
basehash_size
返回类型均为
NUMBER
22 GET_PARAMETER_VALUE
Function
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 116
序号 Oracle数据库 GaussDB数据库 差异
23 GET_SQL_HASH Function GET_SQL_HASH
Function
GaussDB:参数
last4bytes
BIGINT类型,代表
MD5哈希值的最后
四字节,以无符号
整数形式展现,函
数返回类型为
BIGINT
Oracle:对应参数
pre10ihash
NUMBER类型,用
于存储MD5计算得
到的16字节中的4
节哈希值。
24 GET_TIME Function GET_TIME Function GaussDB:函数返
回类型为BIGINT
Oracle:函数返回
类型为NUMBER
25
GET_TZ_TRANSITIONS
Procedure
不支持 -
26 INVALIDATE Procedure 不支持 -
27 IS_BIT_SET Function IS_BIT_SET Function GaussDB:参数n
返回值类型为
INTEGER
Oracle:参数n和返
回值类型为
NUMBER
28 IS_CLUSTER_DATABASE
Function
IS_CLUSTER_DATAB
ASE Function
-
29 MAKE_DATA_BLOCK_AD
DRESS Function
不支持 -
30 NAME_RESOLVE
Procedure
NAME_RESOLVE
Procedure
GaussDB:参数
context
part1_type
INTEGER,参数
object_number
OIDGaussDB不支
NUMBEROID
的隐式转换。
Oracle:参数
context
part1_type
object_number均为
NUMBER
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 117
序号 Oracle数据库 GaussDB数据库 差异
31 NAME_TOKENIZE
Procedure
NAME_TOKENIZE
Procedure
GaussDB:参数
nextposINTEGER
类型。
Oracle:参数
nextpos
BINARY_INTEGER
类型。
32 OLD_CURRENT_SCHEMA
Function
OLD_CURRENT_SC
HEMA Function
GaussDB:函数返
回类型为
VARCHAR
Oracle:函数返回
类型为
VARCHAR2
33 OLD_CURRENT_USER
Function
OLD_CURRENT_US
ER Function
GaussDB:函数返
回类型为TEXT
Oracle:函数返回
类型为
VARCHAR2
34
PORT_STRING Function 不支持 -
35 SQLID_TO_SQLHASH
Function
不支持 -
36 TABLE_TO_COMMA
Procedures
TABLE_TO_COMMA
Procedures
GaussDB:参数tab
VARCHAR2
组。
Oracle:该存储过
程存在2个重载。参
tab可以为两种类
型之一:一种为
uncl_array,另一种
lname_array
37 VALIDATE Procedure 不支持 -
38 WAIT_ON_PENDING_DM
L Function
不支持 -
7-101 DBMS_SQL 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 BIND_ARRAY Procedures SQL_BIND_ARRAY
Function
-
2 BIND_VARIABLE
Procedures
SQL_BIND_VARIABLE
Function
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 118
序号 Oracle数据库 GaussDB数据库 差异
3 BIND_VARIABLE_PKG
Procedure
不支持 -
4 CLOSE_CURSOR
Procedure
SQL_UNREGISTER_C
ONTEXT Function
-
5 COLUMN_VALUE
Procedure
GET_RESULT
Procedure
-
6 COLUMN_VALUE_LONG
Procedure
不支持 -
7 DEFINE_ARRAY Procedure SET_RESULTS_TYPE
Procedure
-
8 DEFINE_COLUMN
Procedures
SET_RESULT_TYPE
Procedure
-
9 DEFINE_COLUMN_CHAR
Procedure
不支持 -
10 DEFINE_COLUMN_LONG
Procedure
不支持 -
11 DEFINE_COLUMN_RAW
Procedure
不支持 -
12 DEFINE_COLUMN_ROWI
D Procedure
不支持 -
13 DESCRIBE_COLUMNS
Procedure
DESCRIBE_COLUMNS
Procedure
-
14 DESCRIBE_COLUMNS2
Procedure
不支持 -
15 DESCRIBE_COLUMNS3
Procedure
不支持 -
16 EXECUTE Function SQL_RUN Function -
17 EXECUTE_AND_FETCH
Function
RUN_AND_NEXT
Function
-
18 FETCH_ROWS Function NEXT_ROW Function -
19 GET_NEXT_RESULT
Procedures
不支持 -
20 IS_OPEN Function IS_ACTIVE Function -
21 LAST_ERROR_POSITION
Function
不支持 -
22 LAST_ROW_COUNT
Function
LAST_ROW_COUNT
Function
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 119
序号 Oracle数据库 GaussDB数据库 差异
23 LAST_ROW_ID Function 不支持 -
24 LAST_SQL_FUNCTION_C
ODE Function
不支持 -
25 OPEN_CURSOR Functions REGISTER_CONTEXT
Function
-
26 PARSE Procedures 支持,有差异 GaussDB
SQL_SET_S
QL
Function
不支持重
载。
27 RETURN_RESULT
Procedures
不支持 -
28 TO_CURSOR_NUMBER
Function
不支持 -
29 TO_REFCURSOR Function 不支持 -
30 VARIABLE_VALUE
Procedures
GET_VARIABLE_RESU
LT Procedures
-
31 VARIABLE_VALUE_PKG
Procedure
不支持 -
7-102 DBMS_SQL 数据类型兼容性说明
序号
Oracle数据库 GaussDB数据库
1 DBMS_SQL DESC_REC DBE_SQL.DESC_REC
2 DBMS_SQL DATE_TABLE DBE_SQL.DATE_TABLE
3 DBMS_SQL NUMBER_TABLE DBE_SQL.NUMBER_TABLE
4 DBMS_SQL VARCHAR2_TABLE DBE_SQL.VARCHAR2_TABLE
5 DBMS_SQL BLOB_TABLE DBE_SQL.BLOB_TABLE
7-103 UTL_FILE 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 FCLOSE Procedure CLOSE Procedure -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 120
序号 Oracle数据库 GaussDB数据库 差异
2 FCLOSE_ALL
Procedure
CLOSE_ALL Procedure -
3 FCOPY Procedure COPY Procedure -
4 FFLUSH Procedure FLUSH Procedure -
5 FGETATTR Procedure GET_ATTR Procedure -
6 FGETPOS Function GET_POS Function -
7 FOPEN Function FOPEN Function -
8 FOPEN_NCHAR
Function
FOPEN_NCHAR Function -
9 FREMOVE Procedure REMOVE Procedure -
10 FRENAME Procedure RENAME Procedure -
11 FSEEK Procedure SEEK Procedure -
12 GET_LINE Procedure READ_LINE Procedure -
13 GET_LINE_NCHAR
Procedure
READ_LINE_NCHAR
Procedure
-
14 GET_RAW Procedure GET_RAW Procedure -
15 IS_OPEN Function IS_OPEN Function -
16 NEW_LINE
Procedure
支持,有差异,
NEW_LINE Function
GaussDB将接口定义为
Function
17 PUT Procedure 支持,有差异,WRITE
Function
GaussDB将接口定义为
Function
18 PUT_LINE Procedure 支持,有差异,
WRITE_LINE Function
GaussDB将接口定义为
Function
19 PUT_LINE_NCHAR
Procedure
支持,有差异,
WRITE_LINE_NCHAR
Function
GaussDB将接口定义为
Function
20 PUT_NCHAR
Procedure
支持,有差异,
WRITE_NCHAR Function
GaussDB将接口定义为
Function
21 PUTF Procedure 支持,有差异,
FORMAT_WRITE
Function
GaussDB将接口定义为
Function
22 PUTF_NCHAR
Procedure
支持,有差异,
FORMAT_WRITE_NCHAR
Function
GaussDB将接口定义为
Function
23 PUT_RAW Procedure 支持,有差异,PUT_RAW
Function
GaussDB将接口定义为
Function
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 121
7-104 DBMS_SESSION 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 CLEAR_ALL_CONTEX
T Procedure
不支持 -
2 CLEAR_CONTEXT
Procedure
CLEAR_CONTEXT
Function
-
3 CLEAR_IDENTIFIER
Procedure
不支持 -
4 CLOSE_DATABASE_L
INK Procedure
不支持 -
5 CURRENT_IS_ROLE_
ENABLED Function
不支持 -
6 FREE_UNUSED_USE
R_MEMORY
Procedure
不支持
-
7 GET_PACKAGE_MEM
ORY_UTILIZATION
Procedure
不支持
-
8 IS_ROLE_ENABLED
Function
不支持 -
9 IS_SESSION_ALIVE
Function
不支持 -
10 LIST_CONTEXT
Procedures
不支持 -
11 MODIFY_PACKAGE_
STATE Procedure
MODIFY_PACKAGE_ST
ATE Procedure
GaussDB:仅支持入参
ags = 1的场景使用。
Oracle:支持ags=1
ags = 2的场景使用。
12
RESET_PACKAGE
Procedure
不支持 -
13 SESSION_IS_ROLE_E
NABLED Function
不支持 -
14 SESSION_TRACE_DIS
ABLE Procedure
不支持 -
15 SESSION_TRACE_EN
ABLE Procedure
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 122
序号 Oracle数据库 GaussDB数据库 差异
16 SET_CONTEXT
Procedure
SET_CONTEXT
Function
GaussDB:仅包括参数
namspaceattribute
value,类型均为text
Oracle:包括参数
namspaceattribute
valueusername
client_id,类型均为
VARCHAR2
17 SET_EDITION_DEFER
RED Procedure
不支持 -
18 SET_IDENTIFIER
Procedure
不支持 -
19 SET_NLS Procedure 不支持 -
20 SET_ROLE Procedure 不支持 -
21 SET_SQL_TRACE
Procedure
不支持 -
22 SLEEP Procedure 不支持 -
23 SWITCH_CURRENT_
CONSUMER_GROUP
Procedure
不支持
-
24 UNIQUE_SESSION_I
D Function
不支持 -
7-105 UTL_MATCH 兼容性说明
Oracle数据库 GaussDB数据库 差异
1 EDIT_DISTANCE
Function
不支持 -
2 EDIT_DISTANCE
_SIMILARITY
Function
EDIT_DISTANCE_
SIMILARITY
Function
GaussDB:参数str1str2均为TEXT
型,函数返回类型为INTEGER
Oracle:参数s1s2VARCHAR2
型,函数返回类型为PLS_INTEGER
3
JARO_WINKLER
Function
不支持 -
4 JARO_WINKLER
_SIMILARITY
Function
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 123
7-106 DBMS_APPLICATION_INFO 兼容性说明
Oracle数据库 GaussDB数据
差异
1 READ_CLIENT_IN
FO Function
READ_CLIENT_
INFO
Procedure
GaussDB:参数client_infoTEXT
型。
Oracle:参数client_infoVARCHAR2
类型。
2
READ_MODULE
Procedure
READ_MODUL
E Procedure
GaussDB:参数module_name
action_nameTEXT类型。
Oracle:参数module_name
action_nameVARCHAR2类型。
3
SET_ACTION
Procedure
SET_ACTION
Procedure
GaussDB:参数action_nameTEXT
类型。
Oracle:参数action_name
VARCHAR2类型。
4
SET_CLIENT_INFO
Function
SET_CLIENT_IN
FO Procedure
GaussDB:参数strTEXT类型,且返
回类型为void
Oracle:参数client_infoVARCHAR2
类型,无返回值。二者均为写入客户
端信息,最大输入64字节,超过64
节将被截断。
5 SET_MODULE
Procedure
SET_MODULE
Procedure
GaussDB:参数module_name
action_nameTEXT类型。
Oracle:参数module_name
action_nameVARCHAR2类型。
6
SET_SESSION_LO
NGOPS Procedure
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 124
7-107 DBMS_XMLDOM 兼容性说明
Oracle数据库 GaussDB数据库 差异
1 DBMS_XMLDO
M.APPENDCHI
LD
DBE_XMLDOM.APP
ENDCHILD
GaussDBDOCUMENT类型节点
APPEND ATTR类型节点会报
operation not support”错
误。
Oracle:在此场景下不报错,但
实际并没有挂载成功。
GaussDBATTR类型节点下
APPEND ATTR类型节点会报
operation not support”错
误。
Oracle:在此场景下不报错,但
实际并没有挂载成功。
GaussDB:父节点在添加多个
ATTR类型子节点时,不允许KEY
值相同的子节点同时存在于同一
个父节点下。
Oracle:允许KEY值相同的子节点
同时存在于同一个父节点下。
2 DBMS_XMLDO
M.CREATEELE
MENT
DBE_XMLDOM.CRE
ATEELEMENT
-
3 DBMS_XMLDO
M.CREATETEX
TNODE
DBE_XMLDOM.CRE
ATETEXTNODE
-
4 DBMS_XMLDO
M.FREEDOCU
MENT
支持,有差异,
DBE_XMLDOM.FRE
EDOCUMENT
GaussDB:释放时不会立刻释放对
象,累积一定数量后释放。
document下全部节点失效。
Oracle:立即释放对象。
5
DBMS_XMLDO
M.FREEELEME
NT
DBE_XMLDOM.FRE
EELEMENT
-
6 DBMS_XMLDO
M.FREENODE
DBE_XMLDOM.FRE
ENODE
-
7 DBMS_XMLDO
M.FREENODEL
IST
支持,有差异,
DBE_XMLDOM.FRE
ENODELIST
GaussDBnodelist会被释放。
Oracle:释放nodelist后,在原始的
doc中还能被查询到。
8
DBMS_XMLDO
M.GETATTRIB
UTE
DBE_XMLDOM.GET
ATTRIBUTE
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 125
Oracle数据库 GaussDB数据库 差异
9 DBMS_XMLDO
M.GETATTRIB
UTES
DBE_XMLDOM.GET
ATTRIBUTES
-
10 DBMS_XMLDO
M.GETCHILDN
ODES
DBE_XMLDOM.GET
CHILDNODES
GaussDB:对documentnode使用
时会包含dtd
Oracle:不包含dtd
11
DBMS_XMLDO
M.GETCHILDR
ENBYTAGNAM
E
DBE_XMLDOM.GET
CHILDRENBYTAGN
AME
GaussDB
DBE_XMLDOM.GETCHILDRENBYTA
GNAME接口的参数ns不支持传入参
" * ",如需获取节点下全部属性,
可使用
DBE_XMLDOM.GETCHILDNODES
口。
Oracle:支持传入参数" * "
12 DBMS_XMLDO
M.GETDOCUM
ENTELEMENT
DBE.XMLDOM.GET
DOCUMENTELEME
NT
-
13 DBMS_XMLDO
M.GETFIRSTC
HILD
DBE_XMLDOM.GET
FIRSTCHILD
-
14 DBMS_XMLDO
M.GETLASTCH
ILD
DBE_XMLDOM.GET
LASTCHILD
-
15 DBMS_XMLDO
M.GETLENGT
H
DBE_XMLDOM.GET
LENGTH
-
16 DBMS_XMLDO
M.GETLOCALN
AME
DBE_XMLDOM.GET
LOCALNAME
-
17 DBMS_XMLDO
M.GETNAMED
ITEM
DBE_XMLDOM.GET
NAMEDITEM
-
18 DBMS_XMLDO
M.GETNEXTSI
BLING
DBE_XMLDOM.GET
NEXTSIBLING
-
19 DBMS_XMLDO
M.GETNODEN
AME
DBE_XMLDOM.GET
NODENAME
-
20 DBMS_XMLDO
M.GETNODET
YPE
DBE_XMLDOM.GET
NODETYPE
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 126
Oracle数据库 GaussDB数据库 差异
21 DBMS_XMLDO
M.GETTAGNA
ME
DBE_XMLDOM.GET
TAGNAME
-
22 DBMS_XMLDO
M.IMPORTNO
DE
DBE_XMLDOM.IMP
ORTNODE
-
23 DBMS_XMLDO
M.ISNULL
DBE_XMLDOM.ISN
ULL
GaussDB:入参为DOMNODELIST
类型时,若对象在哈希表中不存在会
发生报错。
Oracle:不会报错。
24
DBMS_XMLDO
M.ITEM
DBE_XMLDOM.ITE
M
-
25 DBMS_XMLDO
M.MAKENODE
DBE_XMLDOM.MA
KENODE
GaussDB:该函数不支持直接作为函
数返回值返回。
Oracle:支持直接作为函数返回值返
回。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 127
Oracle数据库 GaussDB数据库 差异
26 DBMS_XMLDO
M.NEWDOMD
OCUMENT
DBE_XMLDOM.NE
WDOMDOCUMEN
T
GaussDB入参大小需限制1GB
内。
Oracle:与CLOB类型大小一致。
GaussDB 目前暂不支持外部DTD
解析。
Oracle:支持解析外部DTD
GaussDB newdomdocument
建的doc,默认UTF-8字符集。
Oracle:根据服务端字符集生
成。
GaussDB 从同一个xmltype实例
中解析出的每一个doc都是独立
的,对doc的修改也不会影响到
xmltype
Oracle:从同一个xmltype实例中
解析出的每一个doc不独立,有关
联关系。
GaussDB version字段只支持
1.01.0-1.9解析警告但正常执
行,1.9以上报错。
Oracle:不报错。
GaussDB Oracle数据库DTD
验差异:!ATTLIST to type
(CHECK|check|Check) "Ch..."将报
错,因默认值"Ch..."不属于括号
中枚举值,而Oracle数据库不报
错。<!ENTITY baidu
"www.baidu.com">......
&Baidu;&writer将报错,因区分
字母大小写,Baidu无法与baidu
对应。
Oracle:不报错。
GaussDB Oracle数据库命名空
间校验差异:解析未声明的命名
空间标签正常执行。
Oracle:报错。
27
DBMS_XMLDO
M.SETATTRIBU
TE
DBE_XMLDOM.SET
ATTRIBUTE
GaussDB:属性key不支持为null
空字符串。
Oracle:属性key允许为null或空字
符串。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 128
Oracle数据库 GaussDB数据库 差异
28 DBMS_XMLDO
M.SETCHARSE
T
DBE_XMLDOM.SET
CHARSET
GaussDB目前支持的字符集有:
UTF-8UTF-16UCS-4UCS-2
ISO-8859-1ISO-8859-2
ISO-8859-3ISO-8859-4
ISO-8859-5ISO-8859-6
ISO-8859-7ISO-8859-8
ISO-8859-9ISO-2022-JP
Shift_JISEUC-JPASCII。输入其
他字符集会报错或者可能导致输出乱
29 DBMS_XMLDO
M.SETDOCTYP
E
DBE_XMLDOM.SET
DOCTYPE
GaussDB namesysidpubid的总
长度限制在32500个字节以内。
Oracle:限制在32767字节内。
30
DBMS_XMLDO
M.WRITETOBU
FFER
支持,有差异,
DBE_XMLDOM.WR
ITETOBUFFER
GaussDBwritetobuer输出
buer限制在1GB以内。
Oracle:限制在32767字节内。
GaussDB:输出doc将包含XML
versionencoding
Oracle:用户不主动指定将不包
含。
GaussDB:入参为domnode类型
时,如果节点是doc转换的,输出
节点将包含XML声明version
encoding
Oracle:用户不主动指定将不包
含。
GaussDB:默认以UTF-8字符集
输出xml
Oracle:根据数据库字符集生
成。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 129
Oracle数据库 GaussDB数据库 差异
31 DBMS_XMLDO
M.WRITETOCL
OB
DBE_XMLDOM.WR
ITETOCLOB
GaussDBwritetoclob大小支持
1GB以内。
Oracle:按CLOB大小支持。
GaussDB:输出doc将包含XML
versionencoding
Oracle:用户不主动指定将不包
含。
GaussDB:入参为domnode类型
时,如果节点是doc转换的,输出
节点将包含XML声明version
encoding
Oracle:用户不主动指定将不包
含。
GaussDB 默认以UTF-8字符集输
xml
Oracle:根据数据库字符集生
成。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 130
Oracle数据库 GaussDB数据库 差异
32 DBMS_XMLDO
M.WRITETOFIL
E
DBE_XMLDOM.WR
ITETOFILE
GaussDBdocument入参,
lename长度限制在255个字节以
内,charset请参考
dbe_xmldom.setcharset接口。
Oraclelename长度限制受操
作系统影响,大于255个字节。
GaussDBdomnode入参,
lename长度限制在255个字节以
内,charset请参考
dbe_xmldom.setcharset接口。
Oraclelename长度限制受操
作系统影响,大于255个字节。
GaussDB:该函数会添加缩进等
内容,将输出格式化。输出doc
包含XML声明version
encoding。入参为domnode类型
时,如果节点是doc转换的,输出
节点将包含XML声明version
encoding
Oracle:用户不主动指定将不包
含。
GaussDB:传入
newdomdocument()无参创建的
doc,在不指定charset时不会报
错,默认UTF-8字符集。
Oracle:会进行报错。
GaussDBlename需要在
pg_directory中创建的路径下,
lename中的\会被转换成/,只允
许存在一个/。文件名格式应为
pg_directory_name/le_name
Oracle:按用户输入不进行转
义。
33
DBMS_XMLDO
M.GETNODEV
ALUE
DBE_XMLDOM.GET
NODEVALUE
-
34 DBMS_XMLDO
M.GETPARENT
NODE
DBE_XMLDOM.GET
PARENTNODE
-
35 DBMS_XMLDO
M.HASCHILDN
ODES
DBE_XMLDOM.HA
SCHILDNODES
-
36 DBMS_XMLDO
M.MAKEELEM
ENT
DBE_XMLDOM.MA
KEELEMENT
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 131
Oracle数据库 GaussDB数据库 差异
37 DBMS_XMLDO
M.SETNODEV
ALUE
DBE_XMLDOM.SET
NODEVALUE
GaussDBnodeValue入参,可
以输入空字符串和NULL值,但不
会对节点值进行修改。
Oracle:空字符串和NULL会将节
点值修改为空字符串。
GaussDBnodeValue入参,暂
不支持转义字符'&',如字符串中
包含该转义字符,会清空节点
值。
Oracle:支持转义字符。
38 DBMS_XMLDO
M.GETELEME
NTSBYTAGNA
M
DBE_XMLDOM.GET
ELEMENTSBYTAGN
AME
-
7-108 DBMS_XMLPARSER 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 DBMS_XMLPAR
SER.FREEPARSE
R
DBE_XMLPARSER.F
REEPARSER
-
2 DBMS_XMLPAR
SER.GETDOCU
MENT
DBE_XMLPARSER.G
ETDOCUMENT
-
3 DBMS_XMLPAR
SER.GETVALIDA
TIONMODE
DBE_XMLPARSER.G
ETVALIDATIONMO
DE
-
4 DBMS_XMLPAR
SER.NEWPARSE
R
支持,有差异,
DBE_XMLPARSER.
NEWPARSER
GaussDBparser对象的数量上限
16777215Oracle中约为1亿。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 132
序号 Oracle数据库 GaussDB数据库 差异
5 DBMS_XMLPAR
SER.PARSEBUFF
ER
支持,有差异,
DBE_XMLPARSER.P
ARSEBUFFER
Oracle数据库解析字段差
异:字符串encoding只支持
UTF-8version字段只支持
1.01.0-1.9解析警告但正常执
行,1.9以上报错。
Oracle数据库命名空间校验
差异:解析未声明的命名空间
标签正常执行,而Oracle数据
库会报错。
Oracle数据库xml预定义实体
解析差异:&apos;&quot;会被
解析转译为字符’”,而
Oracle中预定义实体统一都没
有转译为字符。
Oracle数据库DTD校验差
异:
!ATTLIST to type (CHECK|
check|Check) "Ch..."将报
错,因默认值"Ch..."不属于
括号中枚举值,而Oracle
据库不报错。
<!ENTITY baidu
"www.baidu.com">......
&Baidu;&writer将报错,因
区分字母大小写,Baidu
法与baidu对应,而Oracle
数据库不报错。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 133
序号 Oracle数据库 GaussDB数据库 差异
6 DBMS_XMLPAR
SER.PARSECLOB
支持,有差异,
DBE_XMLPARSER.P
ARSECLOB
PARSECLOB不支持解析大于等
2GBclob
Oracle数据库解析字段差
异:字符串encoding只支持
UTF-8version字段只支持
1.01.0-1.9解析警告但正常执
行,1.9以上报错。
Oracle数据库命名空间校验
差异:解析未声明的命名空间
标签正常执行,而Oracle数据
库会报错。
Oracle数据库xml预定义实体
解析差异:&apos;&quot;会被
解析转译为字符’”,而
Oracle中预定义实体统一都没
有转译为字符。
Oracle数据库DTD校验差
异:
!ATTLIST to type (CHECK|
check|Check) "Ch..."将报
错,因默认值"Ch..."不属于
括号中枚举值,而Oracle
据库不报错。
<!ENTITY baidu
"www.baidu.com">......
&Baidu;&writer将报错,因
区分字母大小写,Baidu
法与baidu对应,而Oracle
数据库不报错。
7
DBMS_XMLPAR
SER.SETVALIDA
TIONMODE
DBE_XMLPARSER.S
ETVALIDATIONMO
DE
-
7-109 DBMS_ILM 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 DBMS_ILM.ADD
_TO_ILM
不支持 -
2 DBMS_ILM.ARC
HIVESTATENAM
E
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 134
序号 Oracle数据库 GaussDB数据库 差异
3 DBMS_ILM.EXEC
UTE_ILM
DBE_ILM.EXECUTE
_ILM
GaussDB数据库的入参schema
Oracle数据库中对应为
owner
GaussDB数据库不支持指定
ilm_scope(一次指定多个对
象)的操作。
4 DBMS_ILM.EXEC
UTE_ILM_TASK
不支持 -
5 DBMS_ILM.PRE
VIEW_ILM
不支持 -
6 DBMS_ILM.REM
OVE_FROM_ILM
不支持 -
7 DBMS_ILM.STO
P_ILM
DBE_ILM.STOP_IL
M
-
7-110 DBMS_ILM_ADMIN 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 DBMS_ILM_AD
MIN.CLEAR_HE
AT_MAP_ALL
不支持
-
2 DBMS_ILM_AD
MIN.CLEAR_HE
AT_MAP_TABLE
不支持
-
3 DBMS_ILM_AD
MIN.CUSTOMIZ
E_ILM
DBE_ILM_ADMIN.C
USTOMIZE_ILM
入参parameter取值对应的特性参
数存在差异。
GaussDB数据库param取值支
12711121314
15
GaussDB数据库param取值为
14时,对应的特性参数为
WIND_DURATION,用于控制
自动调度中执行窗口的持续时
长,而ORACLE数据库无对应
的特性参数。
4 DBMS_ILM_AD
MIN.DISABLE_IL
M
DBE_ILM_ADMIN.
DISABLE_ILM
-
5 DBMS_ILM_AD
MIN.ENABLE_A
UTO_OPTIMIZE
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 135
序号 Oracle数据库 GaussDB数据库 差异
6 DBMS_ILM_AD
MIN.ENABLE_IL
M
DBE_ILM_ADMIN.E
NABLE_ILM
-
7 DBMS_ILM_AD
MIN.
IGNORE_AUTO_
OPTIMIZE_
CRITERIA
不支持
-
8 DBMS_ILM_AD
MIN.SET_HEAT_
MAP_ALL
不支持
-
9 DBMS_ILM_AD
MIN.SET_HEAT_
MAP_START
不支持
-
10 DBMS_ILM_AD
MIN.SET_HEAT_
MAP_TABLE
不支持
-
7-111 DBMS_COMPRESSION 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 DBMS_COMPRE
SSION.GET_COM
PRESSION_RATI
O
DBE_COMPRESSIO
N.GET_COMPRESS
ION_RATIO
GaussDB不支持LOBs的压缩率
获取。
对于单个对象的压缩率获取:
GaussDB入参comptype
值仅支持1(未压缩)和2
(高级压缩),Oracle还支
10242048等取值。
GaussDB入参objtype取值
仅支持1(表对象),而
Oracle还支持2(索引对
象)。
Oracle数据库使用
subset_numrows参数直接
来决定采样的行数(即为参
数的取值),而GaussDB
使用sample_ratio(采样
率)来间接确定采样的行
数。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 136
序号 Oracle数据库 GaussDB数据库 差异
2 DBMS_COMPRE
SSION.GET_COM
PRESSION_TYPE
DBE_COMPRESSIO
N.GET_COMPRESS
ION_TYPE
Oracle使用rowid来指定待获取
压缩类型的行,而GaussDB
是使用行的ctid来指定。
返回值为comptype,其取值差
异同
GET_COMPRESSION_RATIO
GaussDB该接口仅支持在DN
用,详见GaussDB《开发指
》中“存储过程> 高级包 >
二次封装接口(推荐)>
DBE_COMPRESSION”章节。
7-112 DBMS_HEAT_MAP 兼容性说明
序号 Oracle数据库 GaussDB数据库 差异
1 DBMS_HEAT_M
AP.BLOCK_HEA
T_MAP
不支持
-
2 DBMS_HEAT_M
AP.EXTENT_HE
AT_MAP
不支持
-
3 DBMS_HEAT_M
AP.OBJECT_HEA
T_MAP
不支持
-
4 DBMS_HEAT_M
AP.SEGMENT_H
EAT_MAP
不支持
-
5 DBMS_HEAT_M
AP.TABLESPACE
_HEAT_MAP
不支持
-
6 不支持 DBE_HEAT_MAP.RO
W_HEAT_MAP
GaussDB该接口仅支持在DN
用,详见GaussDB《开发指南
中“存储过程> 高级包 > 二次封
装接口(推荐)>
DBE_HEAT_MAP”章节。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 137
7-113 DBMS_DESCRIBE 兼容性说明
Oracle数据库 GaussDB数据库 差异
1 DBMS_DESCRI
BE.DESCRIBE_
PROCEDURE
DBE_DESCRIBE.DES
CRIBE_PROCEDURE
datatype参数与Oracle存在差
异,GaussDB返回数据类型的
oidOracle数据库返回Oracle
据库内部的数据类型的编号。
datalengthdataprecision
scaleGaussDB创建存储过程或
函数时无法保留类型的约束(如
number(7,2)varchar2(20)
等),该三个参数置0处理;
Oracle可使用%type方法获得带
约束的数据类型。
GaussDB的具体使用请参见《开
发指南》中“存储过程 > 高级包
> 二次封装接口(推荐) >
DBE_DESCRIBE”章节。
7-114 DBMS_STATS 兼容性说明
Oracle
数据库
GaussDB数据库 差异
DBMS_STATS.ALTER_STA
TS_HISTORY_RETENTION
不支持 -
DBMS_STATS.CANCEL_A
DVISOR_TASK
不支持 -
DBMS_STATS.CONFIGUR
E_ADVISOR_FILTER
不支持 -
DBMS_STATS.CONFIGUR
E_ADVISOR_OBJ_FILTER
不支持 -
DBMS_STATS.CONFIGUR
E_ADVISOR_OPR_FILTER
不支持 -
DBMS_STATS.CONFIGUR
E_ADVISOR_RULE_FILTER
不支持 -
DBMS_STATS.CREATE_A
DVISOR_TASK
不支持 -
DBMS_STATS.CONVERT_
RAW_VALUE
不支持 -
DBMS_STATS.CONVERT_
RAW_VALUE_NVARCHAR
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 138
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.CONVERT_
RAW_VALUE_ROWID
不支持 -
DBMS_STATS.COPY_TABL
E_STATS
不支持 -
DBMS_STATS.CREATE_EX
TENDED_STATS
不支持 -
DBMS_STATS.CREATE_ST
AT_TABLE
DBE_STATS.CREATE_STAT
_TABLE
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
DBMS_STATS.DELETE_CO
LUMN_STATS
DBE_STATS.DELETE_COL
UMN_STATS
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
GaussDB中,使用该
接口可以设置表达式
统计信息,但
tabname应传该表达
式对应的索引名。
DBMS_STATS.DELETE_DA
TABASE_PREFS
不支持 -
DBMS_STATS.DELETE_DA
TABASE_STATS
不支持 -
DEDBMS_STATS.DELETE_
DICTIONARY_STATS
不支持 -
DBMS_STATS.DELETE_FIX
ED_OBJECTS_STATS
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 139
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.DELETE_IN
DEX_STATS
DBE_STATS.DELETE_INDE
X_STATS
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
DBMS_STATS.DELETE_PE
NDING_STATS
不支持 -
DBMS_STATS.DELETE_PR
OCESSING_RATE
不支持 -
DBMS_STATS.DELETE_SC
HEMA_PREFS
不支持 -
DBMS_STATS.DELETE_SC
HEMA_STATS
DBE_STATS.DELETE_SCHE
MA_STATS
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
DBMS_STATS.DELETE_SY
STEM_STATS
不支持 -
DBMS_STATS.DELETE_TA
BLE_PREFS
不支持 -
DBMS_STATS.DELETE_TA
BLE_STATS
DBE_STATS.DELETE_TABL
E_STATS
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
DBMS_STATS.DIFF_TABL
E_STATS_IN_HISTORY
不支持 -
DBMS_STATS.DIFF_TABL
E_STATS_IN_PENDING
不支持 -
DBMS_STATS.DIFF_TABL
E_STATS_IN_STATTAB
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 140
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.DROP_ADV
ISOR_TASK
不支持 -
DBMS_STATS.DROP_EXT
ENDED_STATS
不支持 -
DBMS_STATS.DROP_STA
T_TABLE
DBE_STATS.DROP_STAT_T
ABLE
-
DBMS_STATS.EXECUTE_A
DVISOR_TASK
不支持 -
DBMS_STATS.EXPORT_C
OLUMN_STATS
DBE_STATS.EXPORT_COL
UMN_STATS
GaussDBownname
应传schema名。
gaussdb仅支持部分入
参功能,详见《开发
指南 》中“存储过程
> 高级包 > 二次封装
接口(推荐) >
DBE_STATS”章节。
导出的列级统计信息
pg_statistic表保持
一致,多列和
pg_statistic_ext表保持
一致。
支持导出索引表达式
统计信息。要求
tabname传的是索引
名称,colname传的是
索引表达式名称。
权限:需要具有查询
表的analyze权限以及
stattab表的siud
限。
DBMS_STATS.EXPORT_D
ATABASE_PREFS
不支持 -
DBMS_STATS.EXPORT_D
ATABASE_STATS
不支持 -
DBMS_STATS.EXPORT_DI
CTIONARY_STATS
不支持 -
DBMS_STATS.EXPORT_FI
XED_OBJECTS_STATS
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 141
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.EXPORT_IN
DEX_STATS
DBE_STATS.EXPORT_INDE
X_STATS
GaussDBownname
应传schema名。
gaussdb仅支持部分入
参功能,详见《开发
指南 》中“存储过程
> 高级包 > 二次封装
接口(推荐) >
DBE_STATS”章节。
stattab表中,导出的
表、分区级统计信息
numrows
numblocks
relallvisible,分别对
应系统表pg_class
pg_partition
reltuplesrelpages
relallvisible
权限:需要具有查询
表的analyze权限以及
stattab表的siud
限。
DBMS_STATS.EXPORT_PE
NDING_STATS
不支持 -
DBMS_STATS.EXPORT_SC
HEMA_PREFS
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 142
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.EXPORT_SC
HEMA_STATS
DBE_STATS.EXPORT_SCH
EMA_STATS
GaussDBownname
应传schema名。
gaussdb仅支持部分入
参功能,详见《开发
指南 》中“存储过程
> 高级包 > 二次封装
接口(推荐) >
DBE_STATS”章节。
stattab表中,导出的
表、分区级统计信息
numrows
numblocks
relallvisible,分别对
应系统表pg_class
pg_partition
reltuplesrelpages
relallvisible。导出表
相关列级统计信息与
pg_statistic表和
pg_statistic_ext表保持
一致。
权限:需要具有
stattab表的siud
限。
DBMS_STATS.EXPORT_SY
STEM_STATS
不支持 -
DBMS_STATS.EXPORT_TA
BLE_PREFS
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 143
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.EXPORT_TA
BLE_STATS
DBE_STATS.EXPORT_TABL
E_STATS
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
stattab表中,导出的
表、分区级统计信息
numrows
numblocks
relallvisible,分别对
应系统表pg_class
pg_partition
reltuplesrelpages
relallvisible。级联导
出的列级统计信息与
pg_statistic表和
pg_statistic_ext表保持
一致。
权限:需要具有查询
表的analyze权限以及
stattab表的siud
限。
DBMS_STATS.FLUSH_DA
TABASE_MONITORING_I
NFO
不支持
-
DBMS_STATS.GATHER_D
ATABASE_STATS
不支持 -
DBMS_STATS.GATHER_DI
CTIONARY_STATS
不支持 -
DBMS_STATS.GATHER_FI
XED_OBJECTS_STATS
不支持 -
DBMS_STATS.GATHER_I
NDEX_STATS
不支持 -
DBMS_STATS.GATHER_P
ROCESSING_RATE
不支持 -
DBMS_STATS.GATHER_S
CHEMA_STATS
不支持 -
DBMS_STATS.GATHER_S
YSTEM_STATS
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 144
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.GATHER_T
ABLE_STATS
不支持 -
DBMS_STATS.GENERATE
_STATS
不支持 -
DBMS_STATS.GET_ADVIS
OR_OPR_FILTER
不支持 -
DBMS_STATS.GET_ADVIS
OR_RECS
不支持 -
DBMS_STATS.GET_COLU
MN_STATS
不支持 -
DBMS_STATS.GET_INDEX
_STATS
不支持 -
DBMS_STATS.GET_PARA
M
不支持 -
DBMS_STATS.GET_PREFS 不支持 -
DBMS_STATS.GET_STATS
_HISTORY_AVAILABILITY
DBE_STATS.GET_STATS_H
ISTORY_AVAILABILITY
GaussDB查询到的是全库
存在的最早历史统计信息
的收集时间。
DBMS_STATS.GET_STATS
_HISTORY_RETENTION
DBE_STATS.GET_STATS_H
ISTORY_RETENTION
-
DBMS_STATS.GET_SYSTE
M_STATS
不支持 -
DBMS_STATS.GET_TABLE
_STATS
不支持 -
DBMS_STATS.IMPLEMEN
T_ADVISOR_TASK
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 145
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.IMPORT_C
OLUMN_STATS
DBE_STATS.IMPORT_COL
UMN_STATS
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
导出单列col导出的统
计信息与pg_statistic
表保持一致。多列ext-
col导出的统计信息与
pg_statistic_ext表保持
一致。
支持导入索引表达式
统计信息。要求
tabname传的是索引
名称,colname传的是
索引表达式名称。
权限:需要具有查询
表的ANALYZE权限以
stattab表的siud
限。
DBMS_STATS.IMPORT_D
ATABASE_PREFS
不支持 -
DBMS_STATS.IMPORT_D
ATABASE_STATS
不支持 -
DBMS_STATS.IMPORT_DI
CTIONARY_STATS
不支持 -
DBMS_STATS.IMPORT_FI
XED_OBJECTS_STATS
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 146
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.IMPORT_IN
DEX_STATS
DBE_STATS.IMPORT_IND
EX_STATS
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
stattab表中,导入的
表、分区级统计信息
numrows
numblocks
relallvisible,分别对
应系统表pg_class
pg_partition
reltuplesrelpages
relallvisible
权限:需要具有查询
表的analyze权限以及
stattab表的siud
限。
DBMS_STATS.IMPORT_S
CHEMA_PREFS
不支持 -
DBMS_STATS.IMPORT_S
CHEMA_STATS
DBE_STATS.IMPORT_SCH
EMA_STATS
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
stattab表中,导入的
表、分区级统计信息
numrows
numblocks
relallvisible,分别对
应系统表pg_class
pg_partition
reltuplesrelpages
relallvisible。导入表
相关列级统计信息与
pg_statistic表和
pg_statistic_ext表保持
一致。
权限:需要具有
stattab表的siud
限。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 147
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.IMPORT_SY
STEM_STATS
不支持 -
DBMS_STATS.IMPORT_T
ABLE_PREFS
不支持 -
DBMS_STATS.IMPORT_T
ABLE_STATS
DBE_STATS.IMPORT_TABL
E_STATS
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
stattab表中,导入的
表、分区级统计信息
numrows
numblocks
relallvisible,分别对
应系统表pg_class
pg_partition
reltuplesrelpages
relallvisible。级联导
入的列级统计信息与
pg_statistic表和
pg_statistic_ext表保持
一致。
权限:需要具有查询
表的analyze权限以及
stattab表的siud
限。
DBMS_STATS.INTERRUPT
_ADVISOR_TASK
不支持 -
DBMS_STATS.LOCK_PART
ITION_STATS
DBE_STATS.LOCK_PARTITI
ON_STATS
GaussDBownname
应传schema名。
DBMS_STATS.LOCK_SCH
EMA_STATS
DBE_STATS.LOCK_SCHEM
A_STATS
GaussDBownname
应传schema名。
DBMS_STATS.LOCK_TABL
E_STATS
DBE_STATS.LOCK_TABLE_
STATS
GaussDBownname
应传schema名。
DBMS_STATS.MERGE_CO
L_USAGE
不支持 -
DBMS_STATS.PREPARE_C
OLUMN_VALUES
不支持 -
DBMS_STATS.PREPARE_C
OLUMN_VALUES_ROWID
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 148
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.PUBLISH_P
ENDING_STATS
不支持 -
DBMS_STATS.PURGE_STA
TS
DBE_STATS.PURGE_STATS -
DBMS_STATS.REMAP_ST
AT_TABLE
不支持 -
DBMS_STATS.REPORT_A
DVISOR_TASK
不支持 -
DBMS_STATS.REPORT_C
OL_USAGE
不支持 -
DBMS_STATS.REPORT_G
ATHER_AUTO_STATS
不支持 -
DBMS_STATS.REPORT_G
ATHER_DATABASE_STAT
S
不支持
-
DBMS_STATS.REPORT_G
ATHER_DICTIONARY_STA
TS
不支持
-
DBMS_STATS.REPORT_G
ATHER_FIXED_OBJ_STAT
S
不支持
-
DBMS_STATS.REPORT_G
ATHER_SCHEMA_STATS
不支持 -
DBMS_STATS.REPORT_ST
ATS_OPERATIONS
不支持 -
DBMS_STATS.RESET_ADV
ISOR_TASK
不支持 -
DBMS_STATS.RESET_COL
_USAGE
不支持 -
DBMS_STATS.RESET_GLO
BAL_PREF_DEFAULTS
不支持 -
DBMS_STATS.RESET_PAR
AM_DEFAULTS
不支持 -
DBMS_STATS.RESTORE_
DICTIONARY_STATS
不支持 -
DBMS_STATS.RESTORE_F
IXED_OBJECTS_STATS
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 149
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.RESTORE_S
CHEMA_STATS
DBE_STATS.RESTORE_SC
HEMA_STATS
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
DBMS_STATS.RESTORE_S
YSTEM_STATS
不支持 -
DBMS_STATS.RESTORE_T
ABLE_STATS
DBE_STATS.RESTORE_TAB
LE_STATS
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
DBMS_STATS.RESUME_A
DVISOR_TASK
不支持 -
DBMS_STATS.SCRIPT_AD
VISOR_TASK
不支持 -
DBMS_STATS.SEED_COL_
USAGE
不支持 -
DBMS_STATS.SET_ADVIS
OR_TASK_PARAMETER
不支持 -
DBMS_STATS.SET_COLU
MN_STATS
DBE_STATS.SET_COLUMN
_STATS
GaussDBownname
应传schema名。
Gaussdb仅支持部分入
参功能,详见《开发
指南 》中“存储过程
> 高级包 > 二次封装
接口(推荐) >
DBE_STATS”章节。
DBMS_STATS.SET_DATAB
ASE_PREFS
不支持 -
DBMS_STATS.SET_GLOBA
L_PREFS
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 150
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.SET_INDEX
_STATS
DBE_STATS.SET_INDEX_S
TATS
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
GaussDB中新增了
relallvisible入参。
DBMS_STATS.SET_PARA
M
不支持 -
DBMS_STATS.SET_PROCE
SSING_RATE
不支持 -
DBMS_STATS.SET_SCHE
MA_PREFS
不支持 -
DBMS_STATS.SET_SYSTE
M_STATS
不支持 -
DBMS_STATS.SET_TABLE
_PREFS
不支持 -
DBMS_STATS.SET_TABLE
_STATS
DBE_STATS.SET_TABLE_S
TATS
GaussDBownname
应传schema名。
GaussDB仅支持部分
入参功能,详见《开
发指南 》中“存储过
> 高级包 > 二次封
装接口(推荐) >
DBE_STATS”章节。
GaussDB中新增了
relallvisible入参。
DBMS_STATS.SHOW_EXT
ENDED_STATS_NAME
不支持 -
DBMS_STATS.TRANSFER_
STATS
不支持 -
DBMS_STATS.UNLOCK_P
ARTITION_STATS
DBE_STATS.UNLOCK_PAR
TITION_STATS
GaussDBownname
schema名。
DBMS_STATS.UNLOCK_S
CHEMA_STATS
DBE_STATS.UNLOCK_SCH
EMA_STATS
GaussDBownname
schema名。
DBMS_STATS.UNLOCK_T
ABLE_STATS
DBE_STATS.UNLOCK_TAB
LE_STATS
GaussDBownname
schema名。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 151
Oracle数据库 GaussDB数据库 差异
DBMS_STATS.UPGRADE_
STAT_TABLE
不支持 -
7-115 DBMS_XMLGEN 兼容性说明
Oracle数据库 GaussDB数据库 差异
DBMS_XMLGEN.
CONVERT
DBE_XMLGEN.CONV
ERT
-
DBMS_XMLGEN.
NEWCONTEXT
DBE_XMLGEN.NEW
CONTEXT
-
DBMS_XMLGEN.
NEWCONTEXTF
ROMHIERARCHY
DBE_XMLGEN.NEW
CONTEXTFROMHIE
RARCHY
GaussDB生成的递归XML最大深度不
能超过5000万层。
Oraclenewcontextfromhierarchy
方法对于connect by语句生成的xml
是带xml头的,但是对于直接构造的
数据不带xml头,GaussDB均带xml
头。
DBMS_XMLGEN.
SETCONVERTSP
ECIALCHARS
DBE_XMLGEN.SETC
ONVERTSPECIALCH
ARS
-
DBMS_XMLGEN.
SETNULLHANDL
ING
DBE_XMLGEN.SETN
ULLHANDLING
-
DBMS_XMLGEN.
SETROWSETTAG
DBE_XMLGEN.SETR
OWSETTAG
-
DBMS_XMLGEN.
SETROWTAG
DBE_XMLGEN.SETR
OWTAG
-
DBMS_XMLGEN.
USENULLATTRIB
UTEINDICATOR
DBE_XMLGEN.USEN
ULLATTRIBUTEINDI
CATOR
-
DBMS_XMLGEN.
USEITEMTAGSF
ORCOLL
DBE_XMLGEN.USEIT
EMTAGSFORCOLL
-
DBMS_XMLGEN.
GETNUMROWSP
ROCESSED
DBE_XMLGEN.GETN
UMROWSPROCESSE
D
-
DBMS_XMLGEN.
SETMAXROWS
DBE_XMLGEN.SETM
AXROWS
-
DBMS_XMLGEN.
SETSKIPROWS
DBE_XMLGEN.SETSK
IPROWS
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 152
Oracle数据库 GaussDB数据库 差异
DBMS_XMLGEN.
RESTARTQUERY
DBE_XMLGEN.RESTA
RTQUERY
GaussDB分布式中不允许cursor反向移
动,因此restartquery函数不可使用。
DBMS_XMLGEN.
GETXMLTYPE
DBE_XMLGEN.GETX
MLTYPE
-
DBMS_XMLGEN.
GETXML
DBE_XMLGEN.GETX
ML
-
DBMS_XMLGEN.
CLOSECONTEXT
DBE_XMLGEN.CLOS
ECONTEXT
-
7.2 主备版
7.2.1 Oracle 数据库兼容性概述
GaussDB数据库在基本功能(数据类型、SQL、数据库对象等)和PLSQL方面与Oracle
数据库基本兼容。但是由于架构设计方面的差异,还是存在一些不兼容的项,本章节
主要介绍GaussDB数据库的Oracle兼容模式与Oracle数据库19C版本的兼容性对比信
息。
7.2.2 SQL 的基本元素
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 153
7.2.2.1 数据类型
7-116 数值类型
序号
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 支持。 -
7-117 日期时间类型
序号
Oracle数据类型 GaussDB数据库是
否支持
差异
1 DATE 支持,有差异。 精度有差异,
GaussDB支持的公元
时间较Oracle范围更
大。
2
TIMESTAMP
[ ( fractional_seconds_pre
cision ) ]
支持。
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 154
序号 Oracle数据类型 GaussDB数据库是
否支持
差异
3 TIMESTAMP
[ ( fractional_seconds_pre
cision ) ] WITH TIME
ZONE
支持,有差异。
GaussDB
timestamptz等价于
Oracle
timestampwithloacl
timezone,缺少
Oracle对应的
timestamptz类型。
时区更新:部分国家
或地区可能会经常更
新时区信息, 数据
库系统因此需要同步
修改时区文件以确保
时间内容的正确性。
GaussDB时区类型目
前只涉及timestamp
with timezone,当
新的时区文件生效
时,不会对已有的数
据进行变更,新数据
会随时区文件信息进
行同步调整。与
Oracle的同类型数据
能力存在差异。
4
TIMESTAMP
[ ( fractional_seconds_pre
cision ) ] WITH LOCAL
TIME ZONE
不支持。
-
5 INTERVAL YEAR
[ ( year_precision ) ] TO
MONTH
支持。
-
6 INTERVAL DAY
[ ( day_precision ) ] TO
SECOND
[ ( fractional_seconds_pre
cision ) ]
支持。
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 155
7-118 字符类型
序号 Oracle数据类型 GaussDB数据库是
否支持
差异
1 VARCHAR2 ( size [ BYTE |
CHAR ] )
支持,有差异。 GaussDB中,size
单位为字节,即仅
支持BYTE,不支持
BYTECHAR之间
选择,最大容量为
10MB;而在Oracle
中,size的单位可以
BYTECHAR之间
选择,
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
节,实际能容纳的
字符数与使用的字
符集有关。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 156
序号 Oracle数据类型 GaussDB数据库是
否支持
差异
3 CHAR [ ( size [ BYTE |
CHAR ] ) ]
支持,有差异。 GaussDB中,size
单位为字节,即仅
支持BYTE,不支持
BYTECHAR之间
选择,最大容量为
10MB;而在Oracle
中,size的单位可以
BYTECHAR之间
选择,最大容量为
2000个字节,实际
能容纳的字符数与
使用的字符集有
关。
4 NCHAR [ ( size ) ] 支持,有差异。 GaussDB中,size
单位为字节,最大
容量为10MB;而在
Oracle中,size单位
为字符,最大容量
2000个字节,实
际能容纳的字符数
与使用的字符集有
关。
5 CLOB 支持,有差异。 不支持定位器。
6 NCLOB 不支持。 -
7 LONG 不支持。 -
7-119 二进制类型
序号
Oracle数据类型 GaussDB数据库是
否支持
差异
1 RAW ( size ) 支持,有差异。 GaussDB中,size
是指字节长度建议
值,不会用于校验
输入raw类型的字节
长度。
2
LONG RAW 不支持。 -
3 BLOB 支持。 -
4 BFILE 不支持。 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 157
7-120 ROWID 类型
序号 Oracle数据类型 GaussDB数据库是否支持
1 ROWID 不支持
2 UROWID 不支持
7-121 用户自定义类型
序号 Oracle数据类型 GaussDB数据库是否支持
1 对象类型 不支持
2 REF数据类型 不支持
3 可变数组 支持
4 嵌套表 支持
7-122 伪类型
序号
Oracle数据类型 GaussDB数据库是否支持
1 anytype 不支持
2 anydata 不支持
3 anydataset 不支持
7-123 xml 类型
序号
Oracle数据类型 GaussDB数据库是
否支持
差异
1 XMLTYPE 支持,有差异 GaussDB中,不支持部分
操作,如不能通过使用
XMLELEMENT函数将字符串
转变为XMLTYPE类型,而是
转变成XML类型。具体请参
见《开发指南》中“SQL
> 数据类型 > XMLTYPE
型”章节。
2 URIType 不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 158
7-124 空间类型
序号 Oracle数据类型 GaussDB数据库是否支持
1 SDO_GEOMETRY 不支持
2 SDO_TOPO_GEOMETRY 不支持
3 SDO_GEORASTER 不支持
7-125 锁模式
级别 Oracle锁模式 GaussDB锁模式 备注
- - NULL GaussDBNULL表示未被赋予
锁,与Oracle0级锁对应。
0 none INVALID GaussDBINVALID表示被赋予
了非法锁。仅在运行过程中出现
GaussDB无法识别的锁时会被
赋予INVALID锁。
1
null AccessShare -
2 RS RowShare -
3 RX RowExclusive -
4 S ShareUpdateExclusi
ve
-
5 SRX Share -
6 \ ShareRowExclusive -
7 X Exclusive -
8 \ AccessExclusive -
7.2.2.2 数据类型比较规则
数据类型比较(排序)规则是指相同数据类型的值之间发生比较(排序)时遵循的比
较(排序)规则。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 159
7-126 比较规则
Oracle数据
Gauss
DB
据库
差异
规则描述
1 Numeric 支持 - 支持基于数值大小的比
较,位于数轴中相对靠
近正方向的数字大于位
于数轴中相对靠近反方
向的数字,如 5 > 31
> -1-1 > -2
2
日期时间值 支持 - 支持基于日期早晚的比
较,较晚的日期/时间戳
大于较早的日期/时间
戳,如'2000-01-01
12:00:00' >
'2000-01-01
11:59:59'
3 二进制值 支持 - 支持基于二进制值大小
的比较,位于数轴中相
对靠近正方向的数字大
于位于数轴中相对靠近
反方向的数字,如 1001
0101 > 1001 0011
4
字符值
持,
有差
GaussDBOracle
中,支持的比较规则不
完全相同,相同比较规
则的名称也可能不同。
GaussDBOracle的比
较规则在可指定性上有
差异,例如GaussDB
支持指定表级别的比较
规则,而Oracle支持。
GaussDBOracle在指
定比较规则的语法上有
差异,例如在GaussDB
中,使用ENCODING
LC_CTYPE
LC_COLLATE三个参数决
定创建数据库时使用的
字符集、字符分类和比
较规则,具体请参见
《开发指南》中“SQL
> SQL语法 > C >
CREATE DATABASE”章
节。而在Oracle中,各
级别的比较规则通常由
一系列带有NLS前缀的参
数确定。
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 160
Oracle数据
Gauss
DB
据库
差异
规则描述
5 对象值 不支
- -
6 Varrays和嵌
套表
持,
有差
OracleGaussDB均支持
Varrays的比较,与Oracle
不同的是,GaussDB不仅支
持比较两个Varrays中的元
素个数,还支持同类型的
Varrays之间的比较。
-
7 数据类型优先
支持 - -
8 数据转换(显
/隐式类型
转换)
支持
- -
7.2.2.3 字面量
7-127 字面量
序号
Oracle数据库 GaussDB数据库
1 文本字面量 支持
2 数值字面量 支持
3 日期时间字面量 支持
4 区间字面量 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 161
7.2.2.4 格式模型
7-128 格式
序号
Oracle数据库 GaussDB
数据库
差异
1 数字格式 支持,有
差异
GaussDB仅在参数a_format_version
值为10ca_format_dev_version值为
s1的情况下,支持$CTMTM9
TMEU格式。同时在该参数下,不
支持THPLSG格式。
GaussDB具体支持情况请参见《开发
指南》中“SQL参考>函数和操作符>
类型转换函数”章节的“number类型
fmt参数表”。
2 日期时间格式 支持,有
差异
GaussDB中用于时间截断和时间四舍
五入的参数,仅在参数
a_format_version值为10c
a_format_dev_version值为s1的情况
下有效。
GaussDB具体支持情况请参见《开发
指南》中“SQL参考>函数和操作符>
时间和日期处理函数和操作符”章节
的“用于日期/时间格式化的模式”。
3 格式模型修饰符 支持 -
4 字符串到日期转
换规则
支持,有
差异
GaussDBto_timestamp_tz函数在参
a_format_version值为10c
a_format_dev_version值为s1的情况
下有效。
GaussDB具体支持情况请参见《开发
指南》中“SQL参考>函数和操作符>
类型转换函数”章节的“to_date/
to_timestamp/to_timestamp_tz”。
5 xml格式模式 不支持 -
7.2.2.5 空值
7-129 空值
序号
Oracle数据库 GaussDB数据库
1 IS NULLIS NOT NULL 支持
2 NULLS in conditions 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 162
7.2.2.6 注释
7-130 comment
序号
Oracle数据库 GaussDB数据库 差异
1 斜杠和星号
/*
支持 -
2 两个连字符
--
支持 -
3 COMMENT命令 支持 -
4 HINT 支持,有差异 GaussDB不支持'--+'hint形式。
具体信息请参见《开发指南》中
SQL调优指南 > 使用Plan
Hint进行调优”章节。
7.2.2.7 数据库对象
7-131 schema 对象
序号
Oracle数据库 GaussDB
据库
差异
1 分析视图 不支持 -
2 属性维度 不支持 -
3 集群 支持 -
4 约束 支持 -
5 数据库链接 支持 -
6 数据库触发器 支持 -
7 尺寸 支持 -
8 外部过程库 不支持 -
9 分层结构 不支持 -
10 索引组织表 不支持 -
11 索引 支持 -
12 索引类型 不支持 -
13 java 不支持 -
14 java资源 不支持 -
15 java源码 不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 163
序号 Oracle数据库 GaussDB
据库
差异
16 join groups 不支持 -
17 物化视图 支持 -
18 物化视图日志 不支持 -
19 挖掘模型 不支持 -
20 对象表 不支持 -
21 对象类型 不支持 -
22 对象视图 不支持 -
23 operators 支持 -
24 支持 -
25 序列 支持 -
26 存储函数 支持 -
27 存储过程 支持 -
28 同义词 支持,有差
Oracle数据库的数据库对象在同一
namespace内不能重名;GaussDB
同一namespace内同义词可与表、视
图、函数、package重名,重名时,
优先访问该名称对象,未寻找到该名
称对象时才会寻找该名称的同义词指
向的对象;同义词指向的对象的
Schema名是用户名时才会搜索
PUBLIC同义词。详细的搜索顺序参
考《开发指南》中的“SQL参考 >
SQL语法 > C > CREATE
SYNONYM”章节中的注意事项,同
义词的搜索过程。
29 支持 -
30 视图 支持 -
31 zone map 不支持 -
7-132 nonschema 对象
序号
Oracle数据库 GaussDB数据库
1 上下文 不支持
2 目录 支持
3 版本 不支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 164
序号 Oracle数据库 GaussDB数据库
4 闪回存档 不支持
5 锁定配置文件 不支持
6 配置文件 不支持
7 还原点 支持
8 角色 支持
9 回滚段
ustore支持回滚段
astore不支持回滚段
10
表空间 支持
11 表空间集 不支持
12 统一审计策略 支持
13 用户 支持
7.2.2.8 数据库对象名称和限定符
7-133 命名规则
序号
Oracle数据库 GaussDB数据库 差异
1 数据库对象命名规则 支持,有差异。 GaussDB默认小
写。
2 模式对象命名规则 支持 -
7.2.2.9 SQL 语句中的引用架构对象和部件的语法
7-134 对象引用
序号
Oracle数据库 GaussDB数据库
1 引用对象的一般语法 支持
2 解析对象的引用 支持
3 引用外部模式对象 支持
4 引用外部数据库对象 支持
5 引用表和索引分区和子分区 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 165
7.2.3 伪列
GaussDB数据库兼容分层查询伪列、序列伪列、rownum伪列,其余暂不支持。
分层查询伪列
7-135 分层查询伪列
序号 Oracle数据库 GaussDB数据库
1 connect_by_iscycle 支持
2 connect_by_isleaf 支持
3 level伪列 支持
序列伪列
7-136 序列
序号
Oracle数据库 GaussDB数据库 差异
1 currval 支持,有差异 GaussDB以函数形式实现。
兼容Oracle调用方式。
2 nextval 支持,有差异 GaussDB以函数形式实现。
兼容Oracle调用方式。
rownum 伪列
7-137 rownum
序号
Oracle数据库 GaussDB数据库 差异
1 rownum 支持,有差异 Oracleleftrightfull join的条
件中使用rownum进行过滤时,不
同的条件下表现不尽相同,可能存
在忽略或部分忽略rownum条件的
现象,而GaussDB在此情况下则表
现为对leftrightfull join后的结
果进行过滤。
7.2.4 操作符
GaussDB数据库基本兼容Oracle数据库的运算符。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 166
SQL 运算符
7-138 SQL 运算符
序号
Oracle数据库 GaussDB数据库
1 一元运算符和二元运算符 支持
2 运算符优先级 支持
算术运算符
7-139 算术运算符
序号 Oracle数据库 GaussDB数据库
1 正负(+-)一元运算符 支持
2 加减(+-)二元运算符 支持
3 乘除(*/)二元运算符 支持
COLLATE 运算符
7-140 COLLATE 运算符
序号
Oracle数据库 GaussDB数据库
1 COLLATE collation_name 支持
连接运算符
7-141 连接运算符
序号
Oracle数据库 GaussDB数据库
1 || 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 167
分层查询运算符
7-142 分层查询运算符
序号
Oracle数据库 GaussDB数据库 差异
1 prior 支持,有差异 GaussDB中仅支持对普通列
调用,不支持对函数等调
用。
2
connect_by_root 支持,有差异 GaussDB中,
connect_by_root调用时,用
括号修饰操作值时,行为与
Oralce一致;不使用括号
时,仅支持对普通列调用此
运算符。
集合运算符
7-143 集合运算符
序号
Oracle数据库 GaussDB数据库
1 union 支持
2 union all 支持
3 intersect 支持
4 minus 支持
多集合运算符
7-144 多集合运算符
序号
Oracle数据库 GaussDB数据库
1 multiset except 支持
2 multiset intersect 支持
3 multiset union 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 168
用户自定义运算符
7-145 用户自定义运算符
序号
Oracle数据库 GaussDB数据库 差异
1 CREATE
OPERATOR
支持,有差异
Oracle中提供的
CONTEXT_CLAUSE支持
自定义功能评估函数,和
GaussDB约束选择性评估
函数不同。GaussDB不支
持自定义功能评估函数。
OracleGaussDB可选参
数差异较大。GaussDB
体请参考《开发指南》中
SQL参考 > SQL语法 >
C > CREATE
OPERATOR”章节的参数
说明部分。
比较操作符
序号
Oracle数据库 GaussDB数据库
1 < = 支持。
2 < > 支持。
3 > = 支持。
4 ^ = 支持。
5 ! = 不支持,!=中间存在空
格时,!会被识别为阶
乘。
当比较操作符(<=<>>=^=)中间存在空格时,也可以识别成没有空格进行正常
操作。!=中间存在空格时,!会被识别为阶乘,可能会导致结果与预期不一致。
7.2.5 表达式
GaussDB数据库兼容大部分Oracle数据库表达式。
7-146 表达式
序号
Oracle数据库 GaussDB数据库 差异
1 简单表达式 支持 -
2 分析视图表达式 不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 169
序号 Oracle数据库 GaussDB数据库 差异
3 复合表达式 支持 -
4 case表达式 支持 -
5 列表示式 支持 -
6 cursor表达式 不支持 -
7 日期时间表达式 支持,有差异 GaussDB的输出结果中不会
带时区信息,而Oracle会带
有类似”PM AMERICA/
LOS_ANGELES”的时区信
息。
8
函数表达式 支持 -
9 区间表达式 部分支持 GaussDB支持形如SELECT
INTERVAL '999999999
23:59:59.999' day(9) to
second FROM DUAL;的语
句,而不支持形如
SELECT(SYSDATE-
SYSDATE) DAY TO
SECOND FROM DUAL;的语
句。Oracle均支持。
10 json对象访问表达
部分支持,有差异 1. GaussDB支持通过“-
>'key'“的方式从JSON对象
中提取value,而Oracle支持
通过“.key“方式来提取
value
2. 对于JSONARRY对象而
言,Oracle支持通过“.key
“方式一次性提取所有key
应的value,但GaussDB目前
不支持。
11 模型表达式 不支持 -
12 对象表达式 不支持 -
13 占位符表达式 部分支持 对于形如“:var“的一般占
位符表达式,GaussDB
持,但不支持通过
INDICATOR关键字将两个一
般占位符表达式结合起来。
14
标量子查询表达式 支持 -
15 类型构造器表达式 部分支持 GaussDB不支持在类型构造
器前指定New关键字,而
Oracle支持。
16
表达式list 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 170
7.2.6 条件
本章节描述常见的条件兼容项,包含比较条件、浮点条件、逻辑条件、模型条件、多
集合条件、模式匹配条件、NULL值条件、XML条件、SQL/JSON条件、复合条件、
BETWEEN条件、EXISTS条件、IN条件、IS OF TYPE条件。详情请参见表1
7-147 条件
序号 Oracle数据库 GaussDB数据库 差异
1 比较条件 支持,有差异 语句中存在ANYSOME
ALL操作符时存在差异,
Oracle支持对list对象进行操
作,而GaussDB中需要将list
对象转换成数组表达式的形
式后再进行操作。
2
浮点条件 不支持 -
3 逻辑条件 支持 -
4 模型条件 不支持 -
5 多集合条件 不支持 -
6 模式匹配条件 支持 -
7 NULL值条件 支持 -
8 XML条件 不支持 -
9 SQL/JSON条件 部分支持,有差异
GaussDB不支持IS JSON
条件和
JSON_TEXTCONTAINS
件。
GaussDBJSONB_EQ
件等同于Oracle
JSON_EQUAL条件,但
GaussDB不支持ERROR
句。
GaussDB
JSONB_EXISTS条件等同
OracleJSON_EXISTS
条件,但GaussDB不支持
ERROR子句、EMPTY
句和PASSING子句。
10 复合条件 支持 -
11 BETWEEN条件 支持 -
12 EXISTS条件 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 171
序号 Oracle数据库 GaussDB数据库 差异
13 IN条件 支持 -
14 IS OF TYPE条件 不支持 -
7.2.7 常见的 SQL DDL 子句
本章节描述常见的SQL DDL子句兼容项,包含分配扩展子句、约束、取消分配未使用
子句、文件规范、日志记录子句、并行子句、物理属性子句、大小子句、存储子句、
聚集函数嵌套。详情请参见7-148
7-148 常用 SQL DDL 子句
序号 Oracle数据库 GaussDB数据库 差异
1 分配扩展子句
语法:
ALLOCATE EXTENT
[ ( { SIZE
size_clause |
DATAFILE
'lename' |
INSTANCE
integer } ... ) ]
例如:创建
employees表后,
改变表的分配扩展
size10M
SQL> create table
employees(EMPLOYEE_I
D NUMBER(38),
JOB_ID NUMBER(38),
SALARY NUMBER(38),
LAST_NAME
VARCHAR2(16));
Table created.
SQL> ALTER TABLE
employees ALLOCATE
EXTENT (SIZE 10M);
Table altered.
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 172
序号 Oracle数据库 GaussDB数据库 差异
2 约束
语法:
{ inline_constraint |
out_of_line_constraint |
inline_ref_constraint |
out_of_line_ref_constrai
nt }
例如:创建表
sta,约束子句中
指定ID列、NAME
列不为空。
SQL> CREATE TABLE
sta(ID INT NOT
NULL, NAME char(8)
NOT NULL, AGE INT,
ADDRESS CHAR(50),
SALARY REAL);
Table created.
支持 -
3 取消分配未使用子
语法:
DEALLOCATE UNUSED
[ KEEP size_clause ]
例如:创建
employees表,进
行了一些插入、删
除操作后,希望使
用取消分配未使用
子句释放
employees表未使
用的空间。
SQL> create table
employees(EMPLOYEE_I
D NUMBER(38),
JOB_ID NUMBER(38),
SALARY NUMBER(38),
LAST_NAME
VARCHAR2(16));
Table created.
- 进行一些插入、删除操
SQL> ALTER TABLE
employees
DEALLOCATE UNUSED;
Table altered.
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 173
序号 Oracle数据库 GaussDB数据库 差异
4 文件规范
语法:
{[ 'lename' |
'ASM_lename' ] [ SIZE
size_clause ] [ REUSE ]
[ autoextend_clause ]}
|
{[ 'lename |
ASM_lename' |
('lename |
ASM_lename' [,
'lename |
ASM_lename' ]...) ]
[ SIZE size_clause ]
[ BLOCKSIZE
size_clause [ REUSE ]}
例如:创建一个临
时表空间
tbs_temp_01
SQL语句的文件规
范子句中指定在表
空间中创建一个临
时数据库文件
templ01.dbf,可
以自动扩展,并将
表空间分配给表空
间组tbs_grp_01
SQL> CREATE
TEMPORARY
TABLESPACE
tbs_temp_01 TEMPFILE
'temp01.dbf'
AUTOEXTEND ON
TABLESPACE GROUP
tbs_grp_01;
Tablespace created.
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 174
序号 Oracle数据库 GaussDB数据库 差异
5 日志记录子句
语法:
{ LOGGING |
NOLOGGING |
FILESYSTEM_LIKE_LOG
GING }
部分支持,有差异
GaussDB不支持
LOGGING约束子句和
FILESYSTEM_LIKE_LOGG
ING约束子句。
例如:
GaussDB创建表,带
LOGGING约束子句,语
法报错。
gaussdb=# CREATE LOGGING
TABLE my_tab(id int, name
char(16));
ERROR: syntax error at or near
"LOGGING"
LINE 1: CREATE LOGGING
TABLE my_tab(id int, name
char(16));
^
GaussDB创建表,带
FILESYSTEM_LIKE_LOGG
ING约束子句,语法报
错。
gaussdb=# CREATE
FILESYSTEM_LIKE_LOGGING
TABLE my_tab(id int, name
char(16));
ERROR: syntax error at or near
"FILESYSTEM_LIKE_LOGGING"
LINE 1: CREATE
FILESYSTEM_LIKE_LOGGING
TABLE my_tab(id int, name
cha...
^
GaussDB仅支持表级的
UNLOGGED约束,不支
持列级的UNLOGGED
束。
例如:GaussDB创建表,
带列级的UNLOGGED
束子句,语法报错。
gaussdb=# CREATE
UNLOGGED TABLE my_tab(id
int UNLOGGED, name
char(16));
ERROR: syntax error at or near
"UNLOGGED"
LINE 1: CREATE UNLOGGED
TABLE my_tab(id int
UNLOGGED, name char(16))...
^
GaussDB仅支持在
CREATE TABLECREATE
TABLE ASSELECT
INTO语句中使用日志记
录子句。
例如:GaussDB创建
TABLESPACE,带
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 175
序号 Oracle数据库 GaussDB数据库 差异
UNLOGGED约束子句,
语法报错。
gaussdb=# CREATE
UNLOGGED TABLESPACE tbs1
RELATIVE LOCATION
'tablespace1/tablespace_1';
ERROR: syntax error at or near
"TABLESPACE"
LINE 1: CREATE UNLOGGED
TABLESPACE tbs1 RELATIVE
LOCATION 'tablespac...
^
6 并行子句
语法:
{ NOPARALLEL |
PARALLEL [ integer ] }
例如:创建表t1
并在并行子句中指
PARALLEL 4,意
为查询和更新表t1
时最多使用4个并
行进程操作。
SQL> CREATE TABLE t1
(id NUMBER, name
VARCHAR2(50))
PARALLEL 4;
Table created.
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 176
序号 Oracle数据库 GaussDB数据库 差异
7 物理属性子句
语法:
[ { PCTFREE integer |
PCTUSED integer |
INITRANS integer |
storage_clause }... ]
部分支持,有差异
GaussDB不支持
PCTUSED
例如:执行在表tbl1中创
建一个tbl1_ind的索引的
SQL语句,并在该语句的
物理属性子句中指定索引
的空间利用率PCTUSED
20%GaussDB执行该
SQL语句语法报错。
gaussdb=# CREATE INDEX
tbl1_ind ON tbl1 (name)
PCTUSED 20;
ERROR: syntax error at or near
"PCTUSED"
LINE 1: CREATE INDEX tbl1_ind
ON tbl1 (name) PCTUSED 20;
^
GaussDB 仅支持在
CREATE TABLECREATE
INDEX语句中使用物理属
性子句。
例如:尝试从表tbl1中获
取数据,创建物化视图
tbl1_mv,并在物理属性
子句中指定该视图的初始
化事务数为30GaussDB
执行该SQL语句语法报
错。
gaussdb=# CREATE
MATERIALIZED VIEW tbl1_mv
INITRANS 30 as select * from
tbl1;
ERROR: syntax error at or near
"INITRANS"
LINE 1: CREATE MATERIALIZED
VIEW tbl1_mv INITRANS 30 as
select * fro...
^
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 177
序号 Oracle数据库 GaussDB数据库 差异
8 大小子句
语法:
integer [ K | M | G | T |
P | E ]
例如:创建一个临
时表空间
tbs_temp_01,并
在表空间中创建一
个临时数据库文件
templ01.dbfSQL
语句的大小子句中
指定初始大小是
5M,可以自动扩
展,并将表空间分
配给表空间组
tbs_grp_01
SQL> CREATE
TEMPORARY
TABLESPACE
tbs_temp_01 TEMPFILE
'temp01.dbf' SIZE 5M
AUTOEXTEND ON
TABLESPACE GROUP
tbs_grp_01;
Tablespace created.
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 178
序号 Oracle数据库 GaussDB数据库 差异
9 存储子句
语法:
STORAGE ({ INITIAL
size_clause | NEXT
size_clause |
MINEXTENTS integer |
MAXEXTENTS { integer
| UNLIMITED } |
maxsize_clause |
PCTINCREASE integer |
FREELISTS integer |
FREELIST GROUPS
integer | OPTIMAL
[ size_clause | NULL ] |
BUFFER_POOL { KEEP |
RECYCLE | DEFAULT } |
FLASH_CACHE { KEEP |
NONE | DEFAULT } |
( CELL_FLASH_CACHE
( KEEP | NONE |
DEFAULT ) ) |
ENCRYPT } ... )
部分支持,有差异
Oracle中由STORAGE
句指定存储参数,而
GaussDB中由WITH子句
指定存储参数。
例如:
Oracle中创建表
my_tab1,在存储子句中
指定表初始大小为10M
需要更多空间时每次增加
5MSQL语句如下:
SQL> CREATE TABLE my_tab1
(id NUMBER(10) PRIMARY KEY,
name VARCHAR2(50))
STORAGE (INITIAL 10M NEXT
5M);
Table created.
GaussDB中创建表
my_tab2,在存储子句中
指定存储引擎类型为
USTORESQL语句如
下:
gaussdb=# CREATE TABLE
my_tab2 (id NUMBER(10)
PRIMARY KEY, name
VARCHAR2(50)) with
(storage_type=ustore);
NOTICE: CREATE TABLE /
PRIMARY KEY will create
implicit index "my_tab2_pkey"
for table "my_tab2"
CREATE TABLE
GaussDB中可选的存储参
数和Oracle存在很大差
异。GaussDB具体可参见
《开发指南》中“SQL
> SQL语法 > C >
CREATE TABLE”的参数
说明部分,“WITH
({storage_parameter =
value} [, ...])”中描述了
CREATE TABLE语句支持
的存储参数。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 179
序号 Oracle数据库 GaussDB数据库 差异
10 聚集函数嵌套
例如:创建由sales
表的sales_amount
列嵌套聚集函数
MIN()SUM()
成的表revenue
SQL> CREATE TABLE
sales(ID INT,
SALES_AMOUNT INT);
Table created.
SQL> INSERT INTO
sales VALUES(1, 100);
1 row created.
SQL> INSERT INTO
sales VALUES (3, 200);
1 row created.
SQL> CREATE TABLE
revenue as SELECT
SUM(MIN(sales_amoun
t)) as total from sales
group by sales_amount;
Table created.
支持
-
7.2.8 SQL 查询和子查询
GaussDB数据库兼容除分层查询以外的SQL查询和子查询。
7-149 SQL 查询和子查询
序号
Oracle数据库 GaussDB数据库 差异
1 创建简单查询 支持 -
2 分层查询 支持,有差异 GaussDB仅支持Oracle中的
CONNECT_BY_FILTERING
模式,不支持
CONNECT_BY_NOFILTERIN
G
3
UNION [ALL]
INTERSECT,减运
算符
支持
-
4 查询结果排序 支持,有差异 GaussDB查询不包含分组,
且目标列同时包含聚集函数
和集合返回函数时,不忽略
对集合返回函数列的排序。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 180
序号 Oracle数据库 GaussDB数据库 差异
5 Joins 支持,有差异 GaussDB只支持和Oracle
Join Types left/right
self naturalfull outer
join等。不支持 In-Memory
Join Group Join
Optimizations方法。
6
使用子查询 支持 -
7 嵌套子查询的解嵌
支持,有差异 GaussDB不支持显式指定
HASH_AJMERGE_AJ
8 分布式查询 支持,有差异 GaussDB需要显式指定
DBLINK查询。
9 聚集函数嵌套 支持 -
7.2.9 PL/SQL 语言
GaussDB数据库基本兼容的PL/SQL操作符、表达式,控制语句、集合和record等等,
不支持预定义的PL/SQL常量和类型、子类型等。
7.2.9.1 PL/SQL 基本语法
7-150 PL/SQL 操作符
序号
Oracle数据库 GaussDB数据库
1 + 支持
2 := 支持
3 => 支持
4 % 支持
5 ' 支持
6 . 支持
7 || 支持
8 / 支持
9 ** 不支持
10 ( 支持
11 ) 支持
12 : 支持
13 , 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 181
序号 Oracle数据库 GaussDB数据库
14 << 支持
15 >> 支持
16 /* 支持
17 */ 支持
18 * 支持
19 " 支持
20 .. 支持
21 = 支持
22 <> 支持
23 != 支持
24 ~= 支持
25 ^= 支持
26 < 支持
27 > 支持
28 <= 支持
29 >= 支持
30 @ 支持
31 -- 支持
32 ; 支持
33 - 支持
7-151 逻辑运算符
序号
Oracle数据库 GaussDB数据库
1 NOT 支持
2 AND 支持
3 OR 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 182
7-152 比较表达式
序号 Oracle数据库 GaussDB数据库
1 IS [NOT] NULL 支持
2 LIKE 支持
3 BETWEEN 支持
4 IN 支持
7-153 条件表达式
序号 Oracle数据库 GaussDB数据库
1 simple CASE 支持
2 searched CASE 支持
7-154 变量声明相关参数
序号
Oracle数据库 GaussDB数据库 差异
1 %TYPE 支持,有差异
GaussDB不支持record
%type
GaussDB不支持
pkg.record变量%type
schema.pkg.record
%type作为出入参类
型。
GaussDB不支持表/
.column.column
%typeschema./
.column.column%type
嵌套1层及以上,作为变
量类型和或者出入参类
型。
GaussDB不支持record
.column.column
%typepkg.record
.column.column%type
嵌套1层及以上的record
的某列类型,作为变量类
型和或者出入参类型。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 183
序号 Oracle数据库 GaussDB数据库 差异
2 %ROWTYPE 支持,有差异
GaussDB在多个CN的环
境下,存储过程中无法声
明临时表的%ROWTYPE
%TYPE属性。因为临时
表仅在当前session有效,
在编译阶段其他CN无法
看到当前CN的临时表。
故多个CN的环境下,会
提示该临时表不存在。
GaussDB不支持view
%rowtype
schema.view%rowtype
作为出入参类型。
GaussDB不支持
package.cursor
%rowtype作为出入参
类型。
7.2.9.2 数据类型兼容性
7-155 其他 PL/SQL 数据类型
序号
Oracle数据库 GaussDB数据库 差异
1 CHARACTER 支持,有差异
GaussDB中字节长度限制
为:1~10485760
Oracle中字节长度限制
为:1~32767
2
VARCHAR 支持,有差异
GaussDB中字节长度限制
为:1~10485760
Oracle中字节长度限制
为:1~32767
3
STRING 不支持 -
4 PLS_INTEGER 不支持 GaussDB可使用int类型替
代。
5 BINARY_INTEGER 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 184
7-156 用户自定义 PL/SQL 子类型
序号 Oracle数据库 GaussDB数据库 差异
1 SUBTYPE
subtype_name IS
base_type
支持
-
2 SUBTYPE
subtype_name IS
base_type
{ precision [,
scale ] | RANGE
low_value ..
high_value }
[ NOT NULL ]
支持,有差异
GaussDBINT类型支持
range约束。Oracle
PLS_INTEGER
BINARY_INTEGER及其预
定义子类型支持RANGE
约束。
GaussDB中在定义变量
时,不支持指定range
束。
GaussDB中,subtype
类型为字符数据类型时,
不支持指定字符集信息。
3 SUBTYPE
subtype_name IS
base_type [ NOT
NULL ]
支持
-
7.2.9.3 控制语句
7-157 条件语句
序号
Oracle数据库 GaussDB数据库
1 IF THEN 支持
2 IF THEN ELSE 支持
3 IF THEN ELSIF 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 185
序号 Oracle数据库 GaussDB数据库
4 simple CASE:
CASE selector
WHEN selector_value_1 THEN
statements_1
WHEN selector_value_2 THEN
statements_2
...
WHEN selector_value_n THEN
statements_n
[ ELSE
else_statements
END CASE;]
支持
5 searched CASE:
CASE
WHEN condition_1 THEN statements_1
WHEN condition_2 THEN statements_2
...
WHEN condition_n THEN statements_n
[ ELSE
else_statements
END CASE;]
支持
7-158 LOOP 循环语句
序号
Oracle数据库 GaussDB数据库
1 [ label ] LOOP
statements
END LOOP [ label ];
支持
2 EXIT 支持
3 EXIT WHEN 支持
4 CONTINUE 支持
5 CONTINUE WHEN 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 186
7-159 FOR 循环语句
序号 Oracle数据库 GaussDB数据库 差异
1 [ label ] FOR
index IN
[ REVERSE ]
lower_bound..upp
er_bound LOOP
statements
END LOOP
[ label ];
支持,有差异 GaussDB使用REVERSE关键
字时,lower_bound必须大
于等于upper_bound,否则
循环体不会被执行。
2
EXIT WHEN 支持 -
3 CONTINUE
WHEN
支持 -
7-160 WHILE LOOP 循环语句
序号 Oracle数据库 GaussDB数据库
1 [ label ] WHILE condition LOOP
statements
END LOOP [ label ];
支持
7-161 GOTO 语句
序号
Oracle数据库 GaussDB数据库
1 GOTO 支持
7-162 NULL 语句
序号
Oracle数据库 GaussDB数据库
1 NULL 支持
7.2.9.4 集合和 Record
7-163 类型
序号
Oracle数据库 GaussDB数据库
1 Associative array (or index-by
table)
支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 187
序号 Oracle数据库 GaussDB数据库
2 VARRAY (variable-size array) 支持
3 Nested table 支持
4 record 支持
7-164 语法
类型 Oracle数据库 GaussDB数据库 差异
Associati
ve array
(or
index-by
table)
TABLE OF
datatype [ NOT
NULL ]
INDEX BY
{ PLS_INTEGER |
BINARY_INTEGER
| VARCHAR2
( v_size ) |
data_type }
支持,有差异
GaussDB不支持
PLS_INTEGER类型,
GaussDBdata_type
以为基础数据类型、或存
储过程内定义的record
型、集合类型、数组类
型,不支持ref cursor
型。
GaussDBNOT NULL
支持语法不支持功能,即
不会校验元素是否为
NULL
详情可参考《开发指南》
中“存储过程 > 数组、集
合和record > 集合”章
节。
VARRAY
(variable
-size
array)
{ VARRAY |
[ VARYING ]
ARRAY }
( size_limit )
OF datatype
[ NOT NULL ]
支持,有差异
GaussDB内不支持NOT
NULL语法。
GaussDB内不支持
datatypevarray类型
varray不能嵌套)。
size_limit功能生效需要在
behavior_compat_option
sGUC参数中开启
varray_compat参数。
详情可参考《开发指南》
中“存储过程 > 数组、集
合和record > 数组”章
节。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 188
类型 Oracle数据库 GaussDB数据库 差异
Nested
table
TABLE OF
datatype [ NOT
NULL ]
支持,有差异
GaussDBNOT NULL
支持语法不支持功能,即
不会校验元素是否为
NULL
详情可参考《开发指南》
中“存储过程 > 数组、集
合和record > 集合”章
节。
record TYPE record_type
IS RECORD
( eld_denition
[,
eld_denition]...
) ;
支持
record的列可以定义为
NOT NULL属性也可以指
定默认值。其他类型嵌套
record类型,record类型
的默认值和NOT NULL
生效;通过
package.record_type访
问类型的形式来创建
record变量,该record
量的默认值和NOT NULL
不生效。
详情可参考《开发指南》
中“存储过程 > 数组、集
合和record > record ”章
节。
7-165 构造器
序号
Oracle数据库 GaussDB数据库
1 collection_type ( [ value [,
value ]... ] )
支持
7-166 变量赋值
序号
Oracle数据库 GaussDB数据库 差异
1 Associative array
(or index-by
table)
支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 189
序号 Oracle数据库 GaussDB数据库 差异
2 VARRAY (variable-
size array)
支持,有差异
GaussDB不同VARRAY
型的数据可以相互赋值,
取决于其元素之间是否能
相互隐式转换。
详情可参考《开发指南》
中“存储过程 > 数组、集
合和record > 数组”章
节。
3 Nested table 支持 -
4 record 支持,有差异
GaussDB不同record类型
的数据可以相互赋值,取
决于列与列之间是否能相
互隐式转换。
详情可参考《开发指南》
中“存储过程 > 数组、集
合和record > record ”章
节。
7-167 集合操作符
序号
Oracle数据库 GaussDB数据库 差异
1 = 支持,有差异
Oracle:比较时忽略集合
成员先后顺序。
GaussDB:比较时严格按
照集合成员先后顺序。
2
<> 支持,有差异
Oracle:比较时忽略集合
成员先后顺序。
GaussDB:比较时严格按
照集合成员先后顺序。
3
IS[NOT] NULL 支持。 -
4 ^= 支持,有差异
Oracle:比较时忽略集合
成员先后顺序。
GaussDB:比较时严格按
照集合成员先后顺序。
5
~= 不支持 -
6 IS[NOT] A SET 不支持 -
7 IS [NOT] EMPTY 不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 190
序号 Oracle数据库 GaussDB数据库 差异
8 expr [ NOT ]
MEMBER [ OF ]
nested_table
不支持
-
9 nested_table1
[ NOT ]
SUBMULTISET
[ OF ]
nested_table2
不支持
-
10 [NOT] IN 支持,有差异
Oracle:比较时忽略集合
成员先后顺序。
GaussDB:比较时严格按
照集合成员先后顺序。
7-168 集合 MULTISET 函数
序号 Oracle数据库 GaussDB数据库
1 MULTISET UNION [ALL |
DISTINCT]
支持
2 MULTISET EXCEPT [ALL |
DISTINCT]
支持
3 MULTISET INTERSECT [ALL |
DISTINCT]
支持
7-169 集合类型函数
序号
Oracle数据库 GaussDB数据库 差异
1 exists(idx) 支持 -
2 extend[(count[,
idx])]
支持,有差异 GaussDB仅支持nesttable
型。
3 delete[(idx1[,
idx2])]
支持 -
4 trim[(n)] 支持,有差异 GaussDB仅支持nesttable
型。
5 count 支持 -
6 rst 支持 -
7 last 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 191
序号 Oracle数据库 GaussDB数据库 差异
8 prior(idx) 支持 -
9 next(idx) 支持 -
10 limit 支持,有差异 GaussDB仅支持nesttable
型。
7-170 record 变量操作
序号 Oracle数据库 GaussDB数据库
1 构造器 支持
2 %ROWTYPE声明变量 支持
3 定义常量constant 不支持
7-171 集合相关函数
序号
Oracle数据库 GaussDB数据库
1 unnest_table(anynesttable) 支持
2 unnest_table(anyindexbytabl
e)
支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 192
7.2.9.5 静态 SQL
7-172 静态查询 SQL 语句
序号
Oracle数据库 GaussDB数据库 差异
1 SELECT 支持,有差异 GaussDBOracle在某些场
景下有不同。
GaussDB中不同事务中的共
享锁在如下场景中不会互相
阻塞:
SELECT FOR SHARE -
SELECT FOR SHARE;
SELECT FOR SHARE -
SELECT FOR KEY SHARE;
SELECT FOR KEY SHARE -
SELECT FOR KEY SHARE;
SELECT FOR KEY SHARE -
SELECT FOR NO KEY
UPDATE;
上述场景中,由于锁与锁之
间未阻塞,对在其他事务中
存在非阻塞锁的数据指定
SKIP LOCKED时,锁不会被
跳过。
7-173 静态 DML SQL 语句
序号
Oracle数据库 GaussDB数据库
1 INSERT 支持
2 UPDATE 支持
3 DELETE 支持
4 MERGE 支持
5 LOCK TABLE 支持
7-174 静态 TCL SQL 语句
序号
Oracle数据库 GaussDB数据库 差异
1 COMMIT 支持 -
2 ROLLBACK 支持 -
3 SAVEPOINT 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 193
序号 Oracle数据库 GaussDB数据库 差异
4 SET
TRANSACTION
支持,有差异 GaussDB不支持NAME
string语法、USE
ROLLBACK SEGMENT
rollback_segment语法。
7-175 伪列
序号 Oracle数据库 GaussDB数据库 差异
1 CURRVAL and
NEXTVAL
支持 -
2 LEVEL 支持 -
3 OBJECT_VALUE 不支持 -
4 ROWID 不支持 -
5 ROWNUM 支持,有差异 不推荐ROWNUM条件用于
JOIN ON子句。GaussDB
ROWNUM条件用于JOIN
ON子句时在LEFT JOIN
RIGHT JOINFULL JOIN
景下和MERGE INTO场景下
与其他数据库行为不一致,
直接进行业务迁移存在风
险。
7-176 隐式游标属性
序号
Oracle数据库 GaussDB数据库 差异
1 SQL%FOUND 支持,有差异 GaussDBcommit\rollback
之后不刷新隐式游标结果,
Oracle会在commit\rollback
之后刷新隐式游标结果。
2
SQL%NOTFOUND 支持,有差异
3 SQL
%ROWCOUNT
支持,有差异
4 SQL%ISOPEN 支持,有差异
5 SQL
%BULK_ROWCOU
NT
不支持
6 SQL
%BULK_EXCEPTIO
NS
支持,有差异
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 194
7-177 显式游标语法及关键字
序号 Oracle数据库 GaussDB数据库
1 CURSOR cursor_name
[ parameter_list ]
RETURN return_type;
支持
2 CURSOR cursor_name
[ parameter_list ]
[ RETURN return_type ]
IS select_statement;
支持
3 OPEN 支持
4 CLOSE 支持
5 FETCH 支持
6 CURRENT OF CURSOR 支持
7-178 显式游标属性
序号
Oracle数据库 GaussDB数据库
1 SQL%FOUND 支持
2 SQL%NOTFOUND 支持
3 SQL%ROWCOUNT 支持
4 SQL%ISOPEN 支持
7-179 游标循环
序号
Oracle数据库 GaussDB数据库
1 FOR LOOP 支持
7-180 自治事务支持场景
序号
Oracle数据库 GaussDB数据库
1 存储过程 支持
2 匿名块 支持
3 函数 支持
4 Package 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 195
7.2.9.6 动态 SQL
7-181 动态 SQL 语句执行方式
序号
Oracle数据库 GaussDB数据库 差异
1 EXECUTE
IMMEDIATE
支持,有差异
GaussDB通过
dynamic_sql_compat
数控制同名变量是否读取
同一参数,并且检查调用
存储过程时绑定参数出入
参类型是否与语句参数类
型一致。
GaussDB不支持调用匿名
块中部分绑定参数场景,
例如匿名块中嵌套动态语
句,使用表达式绑定参
数,具体请参见《开发指
南》中“存储过程 > 动态
语句 > 动态调用匿名块”
章节。
GaussDB不支持
RETURNING/RETURN
INTO
2 OPEN FOR
FETCH CLOSE
支持 -
7.2.9.7 Trigger
7-182 trigger 类型
序号
Oracle数据库 GaussDB数据库 差异
1 DML TRIGGER 支持,有差异 GaussDB不支持Compound
DML Triggers
2 SYSTEM TRIGGER 不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 196
7-183 create trigger
语法类型 Oracle数据库 GaussDB
数据库
差异
create语法 CREATE [ OR
REPLACE ]
[ EDITIONABLE |
NONEDITIONABLE ]
TRIGGER
plsql_trigger_source
支持,有
差异
GaussDB不支持
EDITIONABLE |
NONEDITIONABLE,支持
plsql_trigger_source部分行
为。
plsql_trigger
_source ::=
[schema.]
trigger_name
[ sharing_clause ]
[ default_collation_clau
se ]
{ simple_dml_trigger
|
instead_of_dml_trigger
|
compound_dml_trigger
| system_trigger
}
支持,有
差异
GaussDB不支持schema
sharing_clause
default_collation_clause
simple_dml_
trigger ::=
{ BEFORE | AFTER }
dml_event_clause
[ referencing_clause ]
[ FOR EACH ROW ]
[ trigger_edition_clause
]
[ trigger_ordering_claus
e ]
[ ENABLE | DISABLE ]
[ WHEN ( condition ) ]
trigger_body
支持,有
差异
GaussDB不支持
referencing_clause
referencing_clause(用
from referencing_table
替)、
trigger_edition_clause
trigger_ordering_clause
ENABLE | DISABLE;支持
trigger_body部分行为。
GaussDB在没有INSTEAD
OF TRIGGER的视图上创建
语句级BEFORE/AFTER
TRIGGER时不会报错,执行
DML时报错。
dml_event_c
lause ::=
{ DELETE | INSERT |
UPDATE [ OF column [,
column ]... ] }
[ OR { DELETE | INSERT
| UPDATE [ OF column
[, column]... ] }...
ON [ schema.] { table |
view }
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 197
语法类型 Oracle数据库 GaussDB
数据库
差异
trigger_bod
y ::=
{ plsql_block | CALL
routine_clause }
支持,有
差异
GaussDBplsql_block
允许声明为PRAGMA
AUTONOMOUS_TRANSAC
TION。对于第二个分支,
支持类似语法,具体为
EXECUTE PROCEDURE
function_name
( arguments );方式执行
function,并且function
要用户定义,必须声明为不
带参数并返回类型为触发
器,在触发器触发时执行。
instead_of_
dml_trigger
::=
INSTEAD OF { DELETE |
INSERT | UPDATE }
[ OR { DELETE | INSERT
| UPDATE } ]...
ON [ NESTED TABLE
nested_table_column
OF ] [ schema. ]
noneditioning_view
[ referencing_clause ]
[ FOR EACH ROW ]
[ trigger_edition_clause
]
[ trigger_ordering_claus
e ]
[ ENABLE | DISABLE ]
trigger_body
支持,有
差异
GaussDB不支持NESTED
TABLE
nested_table_column
OFreferencing_clause
trigger_edition_clause
trigger_ordering_clause
ENABLE | DISABLE
compound_
dml_trigger
::=
CREATE trigger FOR
dml_event_clause ON
view
COMPOUND TRIGGER
INSTEAD OF EACH
ROW IS BEGIN
statement;
END INSTEAD OF
EACH ROW;
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 198
语法类型 Oracle数据库 GaussDB
数据库
差异
system_trig
ger ::=
{ BEFORE | AFTER |
INSTEAD OF }
{ ddl_event [OR
ddl_event]... |
database_event [OR
database_event ]... }
ON { [schema.]
SCHEMA |
[ PLUGGABLE ]
DATABASE }
[ trigger_ordering_claus
e ] [ ENABLE |
DISABLE ] trigger_body
不支持 -
7-184 alter trigger
序号 Oracle数据库 GaussDB数据库 差异
1 ALTER TRIGGER
[ schema. ]
trigger_name
{ trigger_compile_clau
se
| { ENABLE |
DISABLE }
| RENAME TO
new_name
| { EDITIONABLE |
NONEDITIONABLE }
} ;
支持,有差异 GaussDB不支持
schema
trigger_compile_cl
ause{ ENABLE |
DISABLE }
{ EDITIONABLE |
NONEDITIONABL
E }
7-185 drop trigger
序号
Oracle数据库 GaussDB
数据库
差异
1 DROP TRIGGER
[ schema. ] trigger ;
支持,有
差异
GaussDB不支持
schema,需要在
trigger_name后面加
ON table_name
Oracle数据库名为*_TRIGGERS的视图统计了trigger的相关信息,GaussDB相关视图与
Oracle存在差异,GaussDB视图具体请参见《开发指南》中“系统表和系统视图 >
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 199
统视图 > 其他视图”中的DB_TRIGGERSADM_TRIGGERS
MY_TRIGGERSDB_TRIGGERSADM_TRIGGERSMY_TRIGGERS章节。
7-186 Nested, Package, and Standalone Subprograms 兼容性
序号
Oracle数据库 GaussDB
数据库
差异
1 nested subprogram(子块) 支持,有差
不支持重载,不支持定
义为自治事务,不支持
SETOF的使用,仅限一
个限定符引用嵌套子程
序或嵌套子程序的变
量。
2
package subprogram 支持 -
3 standalone subprogram(包
Function & Procedure
支持 -
4 匿名块 支持 -
7-187 RETURN 语句支持情况
序号
Oracle数据库 GaussDB数据库
1 Function 支持
2 Procedure 支持
3 匿名块 支持
7-188 Function 相关参数
序号
Oracle数据库 GaussDB数据库 差异
1 DETERMINISTIC 支持,有差异 GaussDB中为
IMMUTABLE
2 PARALLEL_ENABLE 不支持 -
3 PIPELINED 不支持 -
4 RESULT_CACHE 不支持 -
7-189 参数形式支持
序号
Oracle数据库 GaussDB数据库
1 IN 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 200
序号 Oracle数据库 GaussDB数据库
2 OUT 支持
3 IN OUT 支持
7-190 CREATE 语句
序号 Oracle数据库 GaussDB数据库 差异
1 CREATE
FUNCTION
支持,有差异 GaussDB不支持IF NOT
EXISTS语法、
不支持sharing_clause、仅
支持部分指定function属性
的子句(属性的子句仅支持
invoker_rights_clause
句)、不支持关键字
[ EDITIONABLE |
NONEDITIONABLE ]
具体语法请参见《开发指
南》中“SQL参考 > SQL
> C >CREATE
FUNCTION”章节。
2 CREATE LIBRARY 不支持 -
3 CREATE PACKAGE 支持,有差异 GaussDB不支持IF NOT
EXISTS语法、
不支持sharing_clause、仅
支持部分指定package属性
的子句(属性的子句仅支持
invoker_rights_clause
句)、不支持关键字
[ EDITIONABLE |
NONEDITIONABLE ]
具体语法请参见《开发指
南》中“SQL参考 > SQL
> C >CREATE
PACKAGE”章节。
4 CREATE PACKAGE
BODY
支持,有差异 GaussDB不支持IF NOT
EXISTS语法、
不支持sharing_clause、不
支持关键字[ EDITIONABLE |
NONEDITIONABLE ]
具体语法请参见《开发指
南》中“SQL参考 > SQL
> C >CREATE
PACKAGE”章节。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 201
序号 Oracle数据库 GaussDB数据库 差异
5 CREATE
PROCEDURE
支持,有差异
GaussDB不支持IF NOT
EXISTS语法、
不支持sharing_clause以及
后面的子句、不支持关键字
[ EDITIONABLE |
NONEDITIONABLE ]
具体语法请参见《开发指
南》中“SQL参考 > SQL
> C >CREATE
PROCEDURE”章节。
6 CREATE TRIGGER 支持,有差异 GaussDB的具体语法请参见
《开发指南》中“SQL参考
> SQL语法 > C >CREATE
TRIGGER”章节。
7
CREATE TYPE 支持,有差异 GaussDB不支持varray
object类型、UNDER语法。
具体语法请参见《开发指
南》中“SQL参考 > SQL
> C >CREATE TYPE”章
节。
8 CREATE TYPE
BODY
不支持 -
7-191 ALTER 语句
序号
Oracle数据库 GaussDB数据库 差异
1 ALTER FUNCTION 支持,有差异 GaussDB不支持关键字
[ EDITIONABLE |
NONEDITIONABLE ]
REUSE SETTINGS
DEBUG
具体语法请参见《开发指
南》中“SQL参考 > SQL
> A > ALTER
FUNCTION”章节。
2 ALTER LIBRARY 不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 202
序号 Oracle数据库 GaussDB数据库 差异
3 ALTER PACKAGE 支持,有差异 GaussDB不支持关键字
[ EDITIONABLE |
NONEDITIONABLE ]
REUSE SETTINGS
DEBUG
具体语法请参见《开发指
南》中“SQL参考 > SQL
> A > ALTER PACKAGE
章节。
4 ALTER
PROCEDURE
支持,有差异 GaussDB不支持关键字
[ EDITIONABLE |
NONEDITIONABLE ]
REUSE SETTINGS
DEBUG
具体语法请参见《开发指
南》中“SQL参考 > SQL
> A > ALTER
PROCEDURE”章节。
5 ALTER TRIGGER 支持,有差异 GaussDB仅支持修改trigger
名字。
具体语法请参见《开发指
南》中“SQL参考 > SQL
> A > ALTER TRIGGER
章节。
6 ALTER TYPE 支持,有差异 GaussDB仅支持部分语句。
具体语法请参见《开发指
南》中“SQL参考 > SQL
> A > ALTER TYPE”章
节。
7-192 DROP 语句
序号
Oracle数据库 GaussDB数据库 差异
1 DROP FUNCTION 支持 -
2 DROP LIBRARY 不支持 -
3 DROP PACKAGE 支持 -
4 DROP
PROCEDURE
支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 203
序号 Oracle数据库 GaussDB数据库 差异
5 DROP TRIGGER 支持,有差异 GaussDB的语法不同。
具体语法可参考:请参见
《开发指南》中“SQL参考
> SQL语法 > D > DROP
TRIGGER”章节。
6
DROP TYPE 支持,有差异 GaussDB不支持关键字
FORCEVALIDATE
具体语法请参见《开发指
南》中“SQL参考 > SQL
> D > DROP TYPE”章
节。
7 DROP TYPE BODY 不支持 -
7-193 FunctionProcedure、匿名块相关关键字
序号 Oracle数据库 GaussDB数据库 差异
1 ACCESSIBLE BY 不支持 -
2 AGGREGATE 支持,有差异
GaussDB不支持Oracle
aggregate using
[schema.]
implementation_type
法。
GaussDB的具体用法请参
见《开发指南》中“SQL
参考 > SQL语法 > C >
CREATE AGGREGATE
章节。
语法不同,但实现功能相
同。
3 DETERMINISTIC 支持,有差异 GaussDB仅在语法上支持关
键字DETERMINISTIC,未实
现功能。
4
PIPE ROW 不支持 -
5 PIPELINED 不支持 -
6 SQL_MACRO 不支持 -
7 RESTRICT_REFERE
NCES
不支持 -
8 INLINE 不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 204
7-194 异常处理相关关键字
序号 Oracle数据库 GaussDB数据库 差异
1 EXCEPTION_INIT 支持,有差异 GaussDB不支持与系统错误
码进行绑定
2 Exception 支持 -
3 Exception Handler 支持 -
4 SQLCODE 支持 -
5 SQLERRM 支持 -
7-195 其他 PL/SQL 关键字
序号 Oracle数据库 GaussDB数据库 差异
1 COVERAGE 不支持 -
2 COLLATION 支持 -
3 DEPRECATE 不支持 -
4 FORALL 支持 -
5 NOCOPY 不支持 -
6 RETURNING 支持 -
7 SERIALLY_REUSABLE 不支持 -
8 SHARING 不支持 -
9 BULK COLLECT 支持 -
7.2.10 系统函数
兼容函数分为:单行函数、用户自定义函数、AGG函数、分析函数、对象引用函数、
模型函数、OLAP函数。
7.2.10.1 单行函数
序号
Oracle数据库 GaussDB数据库
1 数值函数 支持,有差异
2 返回字符值的字符函数 支持,有差异
3 返回数值的字符函数 支持,有差异
4 字符集函数 不支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 205
序号 Oracle数据库 GaussDB数据库
5 Collation函数 不支持
6 日期时间函数 支持,有差异
7 通用比较函数 支持,有差异
8 转换函数 支持,有差异
9 大对象函数 支持,有差异
10 集合函数 不支持
11 层次函数 支持
12 数据挖掘功能函数 不支持
13 XML类型函数 支持,有差异
14 JSON函数 不支持
15 编码解码函数 支持,有差异
16 空值相关的函数 支持
17 环境和标识符函数 支持,有差异
7-196 数值函数
序号
Oracle数据库函数 GaussDB数据库是
否支持
差异
1 ABS 支持 -
2 ACOS 支持 -
3 ASIN 支持 -
4 ATAN 支持 -
5 ATAN2 支持 -
6 BITAND 支持 -
7 CEIL 支持 -
8 COS 支持 -
9 COSH 支持 -
10 EXP 支持 -
11 FLOOR 支持 -
12 LN 支持 -
13 LOG 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 206
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
14 MOD 支持,有差异
返回类型不一致,Oracle
数据库类型包括
BINARY_DOUBLE
BINARY_FLOAT
NUMBERGaussDB
回类型包括int2int4
int8numeric
当两个入参中有一个是
int类型时,另一个参数
必须为intnumeric类型
或字面值整数(无小数点
的合法数字如:
12)
15 NANVL 支持,有差异 GaussDB不支持直接声明或
浮点数除0得到NaN
16 POWER 支持 -
17 REMAINDER 支持,有差异 返回值数据类型不同
gaussdb
当一个输入是oat4时,另
一个是numeric时,返回
oat4类型;
当两个输入都是oat4时,
返回oat4类型;
当两个输入都是oat8时,
返回oat8类型;
其他数据类型,返回
numeric
oracle
返回值类型是number
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 207
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
18 ROUND 支持,有差异
第一个参数noat类型
GaussDB存在精度损
失,比Oracle数据库精度
低。
返回类型不一致。
round(n, integer)形式,
Oracle数据库NUMBER
类型,GaussDB返回
numeric类型;round(n)
形式,Oracle数据库n
数据类型,GaussDB
能返回oat8numeric
类型,缺少oat4返回类
型。
GaussDB判断入参有
null,执行框架返回null
的逻辑与Oracle数据库不
一致
SELECT round(NULL,'q');
Oracle数据库null
GaussDB报错invalid
input syntax for integer:
"q"
19
SIGN 支持 -
20 SIN 支持 -
21 SINH 支持 -
22 SQRT 支持 -
23 TAN 支持 -
24 TANH 支持,有差异 返回值数据类型不同
gaussdb
当输入是oat8时,返回
oat8类型;
当输入是numeric时,返回
numeric类型;
oracle
返回值类型是number
25 TRUNC 支持 -
26 WIDTH_BUCKET 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 208
7-197 返回字符值的字符函数
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
1 CHR 支持,有差异
输入的数字不符合现有
字符集时,在JDBC
GaussDB会报错,
Oracle数据库会返回乱
码。
输入0256等时Oracle
数据库会返回Ascii码为0
的字符,GaussDB会在
'\0;处截断。
2 CONCAT 支持 -
3 INITCAP 支持,有差异 返回值受限于数据库字符
集,导致返回结果与Oracle
数据库不一致。
4
LOWER 支持,有差异
返回值类型不一致,
Oracle数据库和输入类
型一致的数据类型。
对时间格式上隐式转换
问题,输入时间类型
时,隐式转换为字符串
再进行lower操作。
SELECT
LOWER(TO_DATE('2012-12-10'
,'YYYY-MM-DD'));
Oracle返回10-DEC-12
GaussDB返回
2012-12-10 00:00:00
返回值受限于数据库字
符集,导致返回结果与
Oracle数据库不一致。
5 LPAD 支持 -
6 LTRIM 支持,有差异 返回值类型不一致,输入是
字符数据类型时Oracle返回
VARCHAR2类型,输入是数
据库创建时指定的国家字符
集时Oracle返回
NVARCHAR2类型,输入是
LOB类型时Oracle返回LOB
类型,GaussDB返回TEXT
类型。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 209
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
7 NCHR 支持,有差异
返回值字节长度与
Oracle数据库不一致。
返回值受限于数据库字
符集,导致返回结果与
Oracle数据库不一致。
返回入参对应的字节数
组时,单个字节在
[0x80-0xFF]范围,会返
回“?”,Oracle数据库
返回“?”、或者不输
出、或者会报错。
8 NLS_LOWER 支持,有差异
返回值类型不同,输入
是字符数据类型时
Oracle返回VARCHAR2
类型,输入是LOB类型
Oracle返回LOB类型,
GaussDB返回TEXT
型。
nlsparam参数Oracle
据库还可以传入除
nls_sort外的其他参数种
类而不报错,GaussDB
只支持nls_sort
返回值受限于数据库字
符集,导致返回结果与
Oracle数据库不一致。
9 NLS_UPPER 支持,有差异
返回值类型不同,输入
是字符数据类型时
Oracle返回VARCHAR2
类型,输入是LOB类型
Oracle返回LOB类型,
GaussDB返回TEXT
型。
nlsparam参数Oracle
据库还可以传入除
nls_sort外的其他参数种
类而不报错,GaussDB
只支持nls_sort
返回值受限于数据库字
符集,导致返回结果与
Oracle数据库不一致。
10 NLSSORT 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 210
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
11 REGEXP_REPLACE 支持,有差异
GaussDB入参
source_char不支持
NCLOB类型。
入参match_param选项
'n' 含义有差异:
GaussDB 'n' 选项与
'm' 选项含义相同,表示
采用多行模式匹配;而
Oracle 表示 (.) 能匹配
'\n' 字符,没有指定该选
项时默认不能匹配 '\n'
字符。GaussDB (.)
认匹配 '\n' 选项,不需
要指定选项。
不同正则表达式匹配结
果可能不一致。
SELECT
REGEXP_REPLACE('abc01234xy
z', '(.*?)(\d+)(.*)', '#', 'g')
FROM DUAL;
Oracle报错,GaussDB
返回#####xyz
UTF-8编码字符集下中
文输入时匹配结果可能
不一致。Oracle需要在
GBK字符集实现中文字
符串的正则表达式匹
配。
包含部分转义字符的正
则表达式匹配结果可能
不一致。
SELECT
REGEXP_REPLACE('abcabc',
'\abc', '#', 'g') FROM DUAL;
Oracle报错,GaussDB
返回abcabc
匹配规则受
aformat_regexp_match
参数影响,具体影响规
格请参见《开发指南》
中“SQL参考 > 函数和
操作符 > 字符处理函数
和操作符”章节
REGEXP_REPLACE函数
部分。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 211
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
12 REGEXP_SUBSTR 支持,有差异 匹配规则受
aformat_regexp_match
数影响,具体影响规格请参
见《开发指南》中“SQL
> 函数和操作符 > 字符
处理函数和操作符”章节
REGEXP_SUBSTR函数部
分。
13 REPLACE 支持 -
14 RPAD 支持 -
15 RTRIM 支持 -
16 SUBSTR 支持 -
17 TRANSLATE 支持 -
18 TRIM 支持 -
19 UPPER 支持,有差异
返回值类型不一致,
Oracle数据库和输入类
型一致的数据类型,
GaussDB返回TEXT
型。
对时间格式上隐式转换
问题,输入时间类型
时,隐式转换为字符串
再进行upper操作。
SELECT
UPPER(TO_DATE('2012-12-10',
'YYYY-MM-DD'));
Oracle返回10-DEC-12
GaussDB返回
2012-12-10 00:00:00
返回值受限于数据库字
符集,导致返回结果与
Oracle数据库不一致。
20 INSTRB 支持 -
7-198 返回数值的字符函数
序号
Oracle数据库函数 GaussDB数据库是
否支持
差异
1 ASCII 支持,有差异 返回值类型不同。Oracle
据库返回类型为uint4
GaussDBint4
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 212
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
2 INSTR 支持 -
3 LENGTH 支持 -
4 REGEXP_COUNT 支持,有差异
GaussDB入参
source_char不支持
NCLOB类型。
入参match_param选项
'n' 含义有差异:
GaussDB 'n' 选项与
'm' 选项含义相同,表示
采用多行模式匹配;而
Oracle 表示 (.) 能匹配
'\n' 字符,没有指定该选
项时默认不能匹配 '\n'
字符。GaussDB (.)
认匹配 '\n' 选项,不需
要指定选项。
不同正则表达式匹配结
果可能不一致。
UTF-8编码字符集下中
文输入时匹配结果可能
不一致。Oracle需要在
GBK字符集实现中文字
符串的正则表达式匹
配。
包含部分转义字符的正
则表达式匹配结果可能
不一致
匹配规则受
aformat_regexp_match
参数影响,具体影响规
格请参见《开发指南》
中“SQL参考 > 函数和
操作符 > 字符处理函数
和操作符”章节
REGEXP_COUNT函数部
分。
5
REGEXP_INSTR 支持,有差异 匹配规则受
aformat_regexp_match
数影响,具体影响规格请参
见《开发指南》中“SQL
> 函数和操作符 > 字符
处理函数和操作符”章节
REGEXP_INSTR函数部分。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 213
7-199 日期时间函数
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
1 ADD_MONTHS 支持,有差异
公元后到公元前,
GaussDB会和Oracle
据库相差1年。
GaussDB的计算结果范
围可以到-4714年,
Oracle数据库只到-4713
年。
2 CURRENT_DATE 支持,有差异 GaussDB不支持
nls_date_format参数设置
时间显示格式。
3
CURRENT_TIMEST
AMP
支持,有差异 Oracle数据库参数支持范围
0 ~ 9)。
GaussDB支持范围(0 ~
6),微秒末位零不显示。
4
DBTIMEZONE 支持,有差异 GaussDB不支持自带tz
timestamp类型接口的调
用。
5
EXTRACT 支持 -
6 LAST_DAY 支持,有差异 返回值类型不一致。
GaussDB返回值类型为
timestamp without time
zoneOracle返回值类型为
date
7
LOCALTIMESTAMP 支持,有差异 Oracle数据库参数支持范围
0 ~ 9)。
GaussDB支持范围(0 ~
6),微秒末位零不显示。
8
MONTHS_BETWEE
N
支持,有差异 入参类型不一致。GaussDB
入参均为timestamp
without time zone类型,
Oracle入参均为date类型。
9
NEW_TIME 支持,有差异 new_time函数的第一个入
参为字面量时,字面量的格
式以及函数的返回值类型均
Oracle数据库不一致。
10
NEXT_DAY 支持 -
11 NUMTODSINTERV
AL
支持,有差异 GaussDB不支持dsinterval
类型,暂时用interval兼容
dsinterval类型。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 214
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
12 NUMTOYMINTERV
AL
支持,有差异 GaussDB不支持yminterval
类型,暂时用interval兼容
yminterval类型。
13
SESSIONTIMEZON
E
支持,有差异
赋值语法差异:
GaussDBset session
time zone 8Oracle
alter session set
time_zone= '+08:00'
默认值差异:GaussDB
为时区名称形式
:PRCOracle为偏移
量形式,如:+0800
14 SYS_EXTRACT_UTC 支持 -
15 SYSDATE 支持,有差异 返回值类型不一致。
GaussDB返回值类型为
timestamp without time
zoneOracle返回值类型为
date
16
TO_CHAR 支持,有差异 fmt5’未在Oracle数据库
文档中,未适配。
17 TO_DSINTERVAL 支持,有差异 GaussDB不支持dsinterval
类型,暂时用interval兼容
dsinterval类型。
18
TO_TIMESTAMP 支持,有差异 GaussDB毫秒计算只支持6
位,Oracle数据库支持9
位。
19
TO_TIMESTAMP_T
Z
支持,有差异 GaussDBtimestamptz
价于Oracle
timestampwithloacltimezo
ne,缺少Oracle对应的
timestamptz类型。
nls_date_language只支持
ENGLISHAMERICAN两种
语言。
20 TO_YMINTERVAL 支持,有差异 GaussDB不支持yminterval
类型,暂时用interval兼容
yminterval类型。
21
TZ_OFFSET 支持,有差异 接收一个时区名称为入参的
时候,时区名称的类型比
Oracle数据库要少。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 215
7-200 通用比较函数
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
1 GREATEST 支持,有差异
GaussDB不支持
NLS_SORT参数指定的
比较方式,只支持二进
制比较。
GaussDB不支持多语种
的表达式。
2 LEAST 支持,有差异
GaussDB不支持
NLS_SORT参数指定的
比较方式,只支持二进
制比较。
GaussDB不支持多语种
的表达式。
7-201 转换函数
序号
Oracle数据库函数 GaussDB数据库是
否支持
差异
1 ASCIISTR 支持 -
2 CAST 支持,有差异
GaussDB不支持
multiset子句。
GaussDB不支持
nlsparam参数。
3
HEXTORAW 支持 -
4 RAWTOHEX 支持 -
5 TO_BINARY_DOUB
LE
支持,有差异 GaussDB不支持nlsparam
参数。
6 TO_BINARY_FLOAT 支持,有差异 GaussDB不支持nlsparam
参数。
7 TO_BLOB 支持,有差异
GaussDB不支持long
raw类型。
GaussDB不支持ble
mime_type类型。
8
TO_CLOB 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 216
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
9 TO_DATE 支持,有差异
不支持多语种参数。
返回类型不一致。
缺少控制参数
NLS_DATE_FORMAT
部分format格式不支
持。
fmt = 'j' 158210
15日之前Oracle数据库
GaussDB输出不一
致。
无分割符时,不保证与
Oracle数据库完全一
致。如
to_date(220725,
yymmdd)yy/rr
照固定长度4解析,会解
析为220725月,25
法月份则会报错。
10 TO_MULTI_BYTE 支持 -
11 TO_NCHAR 支持,有差异 GaussDB:将入参的类型
转换为text
Oracle:将入参的类型转
换为国家字符集(national
character set)。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 217
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
12 TO_NUMBER 支持,有差异 Gauss不支持NLS_PARAM
参数
GaussO*fmt选项差异
点描述:
1$
Gauss不支持该fmt
2, (comma)
Gauss:,可以出现在fmt
的任意位置
O*
format中,逗号只能出
现在整数部分,且不能出
现在数字开头,在原数据
中可以在数字的开头位置
支持format中的逗号与原
数据的逗号个数和位置不
一致,但最后一个逗号的
位置需一致
原数据和Format中的连续
逗号,等同于没有逗号。
当原数据中没有逗号时,
format的最后一个逗号后
面的数字位数需与原数据
相等。
3B
GaussDB未实现该功能
4C
Gauss不支持NLS参数
5G
Gauss不支持NLS参数
6L
Gauss不支持NLS参数
7U
Gauss不支持NLS参数
8D
Gauss不支持NLS参数
9PR
Gauss:等同于S,返回负
Oracle
返回<尖括号>中的负值。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 218
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
返回带前导和尾随空格的
正值。
限制:PR格式元素只能出
现在数字格式模型的最后
一个位置。
10RN | rn
GaussDB未实现该功能
TM| TM9 | TMe
GaussDB未实现该功能
11V
GaussDB未实现该功能
12FM
Gauss当有fm时,允许
format中的逗号与原数据
中多,不然需严格保持一
致。
Oracle 返回值保留前后的
空格
13EEEE
GaussDB未实现该功能
13
TO_SINGLE_BYTE 支持 -
14 TREAT 支持,有差异 GaussDB不支持使用“.
操作符取值,不支持转化
object类型。
15
UNISTR 支持,有差异 GaussDB只支持UTF-8
码,Oracle数据库支持
UTF-8UTF-16编码。
7-202 大对象函数
序号
Oracle数据库函数 GaussDB数据库是
否支持
差异
1 EMPTY_BLOB 支持 -
2 EMPTY_CLOB 支持,有差异 GaussDBclob类型不
支持Oracle数据库中的
定位器概念。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 219
7-203 层次函数
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
1 SYS_CONNECT_BY_P
ATH
支持,有差异 GaussDB中第一个入参
指定的列的类型仅支持
CHAR/VARCHAR/
NVARCHAR2/TEXT
型。
7-204 XML 类型函数
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
1 EXISTSNODE 支持,有差异 在入参有命名空间时,
xpath和命名空间都需
要定义别名。
2
EXTRACTVALUE 支持,有差异 目前仅支持xpath1.0
本。
3 SYS_XMLAGG 支持,有差异 xmlagg的别名,可使
xmlagg代替。
4 XMLAGG 支持 -
5 XMLCOMMENT 支持 -
6 XMLCONCAT 支持 -
7 XMLELEMENT 支持,有差异 xmlelement
xmlattributesname
字段赋值为NULL时,
行为与Oracle不一致。
xmlelementname
段赋值为NULL时,结
果显示name信息为
空,且不显示属性信
息。xmlattributes
name字段赋值为NULL
时,不显示属性信息。
8 XMLEXISTS 支持,有差异 GaussDB入参为xml
型。
9 XMLFOREST 支持,有差异 GaussDB返回值为xml
类型。GaussDB不支持
EVALNAME语法。
10
XMLPARSE 支持,有差异 GaussDB返回值为xml
类型。GaussDB不支持
WELLFORMED语法。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 220
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
11 XMLROOT 支持,有差异 GaussDB返回值为xml
类型。
12 JSON_OBJECT 支持 -
13 XMLTABLE 支持,有差异 GaussDBxml中选取
数据使用的为XPath
1.0表达式,不支持声
明默认命名空间,不支
持多组输入及取别名,
不支持省略传入数据的
passing_clause子句,
不支持RETURNING
SEQUENCE BY REF
句和( SEQUENCE ) BY
REF子句。
14 GETSTRINGVAL 支持 -
15 GETCLOBVAL 支持 -
16 XMLSEQUENCE 支持 -
7-205 编码解码函数
序号
Oracle数据库函数 GaussDB数据库是
否支持
差异
1 DECODE 支持 -
2 DUMP 支持,有差异 因存储格式不同,
GaussDB数值和时间类
型返回结果和Oracle
据库不一致。如:
GaussDBSELECT
dump(123); 返回
Typ=23 Len=4:
123,0,0,0
OracleSELECT
dump(123) FROM
dual; 返回Typ=2
Len=3: 194,2,24
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 221
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
3 ORA_HASH 支持,有差异 GaussDB中有以下行
为:
时间类型的入参转
换成字符串类型再
进行hash
不支持maxbucket
参数。
4 VSIZE 支持,有差异 因存储格式不同,
GaussDB数值和时间类
型返回结果和Oracle
据库不一致。如:
GaussDBSELECT
vsize(999); 返回4
OracleSELECT
vsize(999) FROM
dual; 返回3
7-206 空值相关的函数
序号
Oracle数据库函数 GaussDB数据库是
否支持
差异
1 COALESCE 支持 -
2 LNNVL 支持 -
3 NULLIF 支持 -
4 NVL 支持 -
5 NVL2 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 222
7-207 环境和标识符函数
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
1 SYS_CONTEXT 支持,有差异 GaussDB对不支持的参数返回
NULL
以下为不支持的参数列表:
'action'
'is_application_root'
'is_application_pdb'
'audited_cursorid'
'authenticated_identity'
'authentication_data'
'authentication_method'
'cdb_domain'
'cdb_name'
'client_identier'
'con_id'
'con_name'
'current_sql_length'
'db_domain'
'db_supplemental_log_level'
'dblink_info'
'drain_status'
'entryid'
'enterprise_identity'
'fg_job_id'
'global_uid'
'identication_type'
'instance'
'is_dg_rolling_upgrade'
'ldap_server_type'
'module'
'network_protocol'
'nls_calendar'
'nls_sort'
'nls_territory'
'oracle_home'
'os_user'
'platform_slash'
'policy_invoker'
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 223
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
'proxy_enterprise_identity'
'proxy_user'
'proxy_userid'
'scheduler_job'
'session_edition_id'
'session_edition_name'
'sessionid'
'statementid'
'terminal'
'unied_audit_sessionid'
'session_default_collation'
'client_info'
'bg_job_id'
'client_program_name'
'current_bind'
'global_context_memory'
'host'
'current_sqln'
2
SYS_GUID 支持 -
3 USER 支持,有差异 返回值类型不一致,GaussDB
回值类型为nameOracle返回
值类型为varchar2
7.2.10.2 其它函数
序号
Oracle数据库 GaussDB数据库
1 聚合函数 支持
2 分析函数 支持
3 对象引用函数 不支持
4 模型函数 不支持
5 OLAP函数 不支持
6 数据盒功能函数 不支持
7 关于用户定义的函数 支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 224
7-208 聚合函数
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
1 AVG 支持 -
2 CORR 支持 -
3 COUNT 支持 -
4 COVAR_POP 支持 -
5 COVAR_SAMP 支持 -
6 CUME_DIST 支持 -
7 DENSE_RANK 支持 -
8 FIRST 支持 -
9 GROUPING 支持 -
10 LAST 支持 -
11 LISTAGG 支持 -
12 MAX 支持 -
13 MEDIAN 支持 -
14 MIN 支持 -
15 PERCENT_RANK 支持 -
16 PERCENTILE_CONT 支持 -
17 RANK 支持 -
18 REGR_ (Linear
Regression)
支持 -
19 STDDEV 支持 -
20 STDDEV_POP 支持 -
21 STDDEV_SAMP 支持 -
22 SUM 支持 -
23 VAR_POP 支持 -
24 VAR_SAMP 支持 -
25 VARIANCE 支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 225
序号 Oracle数据库函数 GaussDB数据库是
否支持
差异
26 WM_CONCAT 支持,有差异 Oracle通过
WM_CONCAT函数把
查询出来的多个行拼接
成一个字符串,
GaussDB通过
STRING_AGG
LISTAGG函数都可以实
现此功能。
差异点:
WM_CONCAT函数只
支持一个参数,即要合
并的列名,用逗号连
接;STRING_AGG
LISTAGG函数需要两个
参数,第一个参数是要
合并的列名,第二个参
数是分隔符。
WM_CONCAT
STRING_AGG函数支持
distinct,不支持排
序;LISTAGG函数不支
distinct,支持自定
义排序。
7-209 分析函数
序号
Oracle数据库函数 GaussDB数据库是否支持
1 FIRST_VALUE 支持
2 LAG 支持
3 LAST_VALUE 支持
4 LEAD 支持
5 NTH_VALUE 支持
6 NTILE 支持
7 ROW_NUMBER 支持
8 RATIO_TO_REPORT 支持
7.2.11 系统视图
GaussDB数据库兼容了部分Oracle数据库的系统视图,兼容的详细列表如下。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 226
更多系统视图的字段说明信息请参考《开发指南》中“系统视图”章节。
7-210 支持视图列表
序号
Oracle数据库 GaussDB数据库
1 ALL_ALL_TABLES DB_ALL_TABLES
2 ALL_COL_PRIVS DB_COL_PRIVS
3 ALL_COLL_TYPES DB_COLL_TYPES
4 ALL_ERRORS DB_ERRORS
5 ALL_IND_COLUMNS DB_IND_COLUMNS
6 ALL_COL_COMMENTS DB_COL_COMMENTS
7 ALL_CONS_COLUMNS DB_CONS_COLUMNS
8 ALL_CONSTRAINTS DB_CONSTRAINTS
9 ALL_DEPENDENCIES DB_DEPENDENCIES
10 ALL_DIRECTORIES DB_DIRECTORIES
11 ALL_IND_EXPRESSIONS DB_IND_EXPRESSIONS
12 ALL_IND_PARTITIONS DB_IND_PARTITIONS
13 ALL_INDEXES DB_INDEXES
14 ALL_IND_SUBPARTITIONS DB_IND_SUBPARTITIONS
15 ALL_OBJECTS DB_OBJECTS
16 ALL_PART_COL_STATISTICS DB_PART_COL_STATISTICS
17 ALL_PART_KEY_COLUMNS DB_PART_KEY_COLUMNS
18 ALL_PART_TABLES DB_PART_TABLES
19 ALL_SCHEDULER_JOB_ARGS DB_SCHEDULER_JOB_ARGS
20 ALL_SCHEDULER_PROGRAM_ARG
S
DB_SCHEDULER_PROGRAM_
ARGS
21 ALL_SEQUENCES DB_SEQUENCES
22 ALL_SUBPART_COL_STATISTICS DB_SUBPART_COL_STATISTI
CS
23 ALL_SUBPART_KEY_COLUMNS DB_SUBPART_KEY_COLUMN
S
24 ALL_SYNONYMS DB_SYNONYMS
25 ALL_TAB_COL_STATISTICS DB_TAB_COL_STATISTICS
26 ALL_TAB_COMMENTS DB_TAB_COMMENTS
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 227
序号 Oracle数据库 GaussDB数据库
27 ALL_TAB_HISTOGRAMS DB_TAB_HISTOGRAMS
28 ALL_TAB_STATS_HISTORY DB_TAB_STATS_HISTORY
29 ALL_TYPES DB_TYPES
30 ALL_PART_INDEXES DB_PART_INDEXES
31 ALL_PROCEDURES DB_PROCEDURES
32 ALL_SOURCE DB_SOURCE
33 ALL_TAB_COLUMNS DB_TAB_COLUMNS
34 ALL_TAB_PARTITIONS DB_TAB_PARTITIONS
35 ALL_TAB_SUBPARTITIONS DB_TAB_SUBPARTITIONS
36 ALL_TABLES DB_TABLES
37 ALL_TRIGGERS DB_TRIGGERS
38 ALL_USERS DB_USERS
39 ALL_VIEWS DB_VIEWS
40 DBA_AUDIT_OBJECT ADM_AUDIT_OBJECT
41 DBA_AUDIT_SESSION ADM_AUDIT_SESSION
42 DBA_AUDIT_STATEMENT ADM_AUDIT_STATEMENT
43 DBA_AUDIT_TRAIL ADM_AUDIT_TRAIL
44 DBA_COL_COMMENTS ADM_COL_COMMENTS
45 DBA_COL_PRIVS ADM_COL_PRIVS
46 DBA_COLL_TYPES ADM_COLL_TYPES
47 DBA_ARGUMENTS ADM_ARGUMENTS
48 DBA_CONSTRAINTS ADM_CONSTRAINTS
49 DBA_DATA_FILES ADM_DATA_FILES
50 DBA_CONS_COLUMNS ADM_CONS_COLUMNS
51 DBA_DEPENDENCIES ADM_DEPENDENCIES
52 DBA_DIRECTORIES ADM_DIRECTORIES
53 DBA_PART_COL_STATISTICS ADM_PART_COL_STATISTICS
54 DBA_PART_TABLES ADM_PART_TABLES
55 DBA_RECYCLEBIN ADM_RECYCLEBIN
56 DBA_ROLE_PRIVS ADM_ROLE_PRIVS
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 228
序号 Oracle数据库 GaussDB数据库
57 DBA_ROLES ADM_ROLES
58 DBA_SCHEDULER_JOB_ARGS ADM_SCHEDULER_JOB_ARG
S
59 DBA_SCHEDULER_PROGRAMS ADM_SCHEDULER_PROGRA
MS
60 DBA_SCHEDULER_PROGRAM_AR
GS
ADM_SCHEDULER_PROGRA
M_ARGS
61 DBA_HIST_SNAPSHOT ADM_HIST_SNAPSHOT
62 DBA_HIST_SQL_PLAN ADM_HIST_SQL_PLAN
63 DBA_HIST_SQLSTAT ADM_HIST_SQLSTAT
64 DBA_HIST_SQLTEXT ADM_HIST_SQLTEXT
65 DBA_ILMDATAMOVEMENTPOLICI
ES
GS_ADM_ILMDATAMOVEME
NTPOLICIES
66 DBA_ILMEVALUATIONDETAILS GS_ADM_ILMEVALUATIOND
ETAILS
67 DBA_ILMOBJECTS GS_ADM_ILMOBJECTS
68 DBA_ILMPARAMETERS GS_ADM_ILMPARAMETERS
69 DBA_ILMPOLICIES GS_ADM_ILMPOLICIES
70 DBA_ILMRESULTS GS_ADM_ILMRESULTS
71 DBA_ILMTASKS GS_ADM_ILMTASKS
72 DBA_IND_COLUMNS ADM_IND_COLUMNS
73 DBA_IND_EXPRESSIONS ADM_IND_EXPRESSIONS
74 DBA_IND_PARTITIONS ADM_IND_PARTITIONS
75 DBA_INDEXES ADM_INDEXES
76 DBA_OBJECTS ADM_OBJECTS
77 DBA_PART_INDEXES ADM_PART_INDEXES
78 DBA_PROCEDURES ADM_PROCEDURES
79 DBA_SCHEDULER_JOBS ADM_SCHEDULER_JOBS
80 DBA_SCHEDULER_RUNNING_JOB
S
ADM_SCHEDULER_RUNNIN
G_JOBS
81 DBA_SEGMENTS ADM_SEGMENTS
82 DBA_SEQUENCES ADM_SEQUENCES
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 229
序号 Oracle数据库 GaussDB数据库
83 DBA_SOURCE ADM_SOURCE
84 DBA_IND_SUBPARTITIONS ADM_IND_SUBPARTITIONS
85 DBA_SUBPART_COL_STATISTICS ADM_SUBPART_COL_STATIS
TICS
86 DBA_SUBPART_KEY_COLUMNS ADM_SUBPART_KEY_COLUM
NS
87 DBA_SYS_PRIVS ADM_SYS_PRIVS
88 DBA_TAB_COL_STATISTICS ADM_TAB_COL_STATISTICS
89 DBA_TAB_HISTOGRAMS ADM_TAB_HISTOGRAMS
90 DBA_TAB_STATISTICS ADM_TAB_STATISTICS
91 DBA_TAB_STATS_HISTORY ADM_TAB_STATS_HISTORY
92 DBA_TABLESPACES ADM_TABLESPACES
93 DBA_TYPES ADM_TYPES
94 DBA_USERS ADM_USERS
95 DBA_SYNONYMS ADM_SYNONYMS
96 DBA_TAB_COLS ADM_TAB_COLS
97 DBA_TAB_COLUMNS ADM_TAB_COLUMNS
98 DBA_TAB_COMMENTS ADM_TAB_COMMENTS
99 DBA_TABLES ADM_TABLES
100 DBA_TAB_PARTITIONS ADM_TAB_PARTITIONS
101 DBA_TAB_SUBPARTITIONS ADM_TAB_SUBPARTITIONS
102 DBA_TRIGGERS ADM_TRIGGERS
103 DBA_TYPE_ATTRS ADM_TYPE_ATTRS
104 DBA_VIEWS ADM_VIEWS
105 ROLE_ROLE_PRIVS ROLE_ROLE_PRIVS
106 ROLE_SYS_PRIVS ROLE_SYS_PRIVS
107 ROLE_TAB_PRIVS ROLE_TAB_PRIVS
108 USER_COL_COMMENTS MY_COL_COMMENTS
109 USER_COL_PRIVS MY_COL_PRIVS
110 USER_COLL_TYPES MY_COLL_TYPES
111 USER_CONSTRAINTS MY_CONSTRAINTS
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 230
序号 Oracle数据库 GaussDB数据库
112 USER_DEPENDENCIES MY_DEPENDENCIES
113 DICT DICT
114 DICTIONARY DICTIONARY
115 DUAL DUAL
116 NLS_DATABASE_PARAMETERS NLS_DATABASE_PARAMETER
S
117 NLS_INSTANCE_PARAMETERS NLS_INSTANCE_PARAMETER
S
118 PLAN_TABLE PLAN_TABLE
119 USER_ERRORS MY_ERRORS
120 USER_ILMDATAMOVEMENTPOLI
CIES
GS_MY_ILMDATAMOVEMEN
TPOLICIES
121 USER_ILMEVALUATIONDETAILS GS_MY_ILMEVALUATIONDE
TAILS
122 USER_ILMOBJECTS GS_MY_ILMOBJECTS
123 USER_ILMPOLICIES GS_MY_ILMPOLICIES
124 USER_ILMRESULTS GS_MY_ILMRESULTS
125 USER_ILMTASKS GS_MY_ILMTASKS
126 USER_IND_COLUMNS MY_IND_COLUMNS
127 USER_IND_EXPRESSIONS MY_IND_EXPRESSIONS
128 USER_IND_PARTITIONS MY_IND_PARTITIONS
129 USER_IND_SUBPARTITIONS MY_IND_SUBPARTITIONS
130 USER_INDEXES MY_INDEXES
131 USER_JOBS MY_JOBS
132 USER_OBJECTS MY_OBJECTS
133 USER_PART_COL_STATISTICS MY_PART_COL_STATISTICS
134 USER_PART_INDEXES MY_PART_INDEXES
135 USER_PART_TABLES MY_PART_TABLES
136 USER_PROCEDURES MY_PROCEDURES
137 USER_RECYCLEBIN MY_RECYCLEBIN
138 USER_SCHEDULER_JOB_ARGS MY_SCHEDULER_JOB_ARGS
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 231
序号 Oracle数据库 GaussDB数据库
139 USER_SCHEDULER_PROGRAM_AR
GS
MY_SCHEDULER_PROGRAM
_ARGS
140 USER_SEQUENCES MY_SEQUENCES
141 USER_SOURCE MY_SOURCE
142 USER_SUBPART_KEY_COLUMNS MY_SUBPART_KEY_COLUMN
S
143 USER_SYNONYMS MY_SYNONYMS
144 USER_SYS_PRIVS MY_SYS_PRIVS
145 USER_TAB_COL_STATISTICS MY_TAB_COL_STATISTICS
146 USER_TAB_COLUMNS MY_TAB_COLUMNS
147 USER_TAB_COMMENTS MY_TAB_COMMENTS
148 USER_TAB_HISTOGRAMS MY_TAB_HISTOGRAMS
149 USER_TAB_PARTITIONS MY_TAB_PARTITIONS
150 USER_TAB_STATISTICS MY_TAB_STATISTICS
151 USER_TAB_STATS_HISTORY MY_TAB_STATS_HISTORY
152 USER_TAB_SUBPARTITIONS MY_TAB_SUBPARTITIONS
153 USER_TABLES MY_TABLES
154 USER_TABLESPACES MY_TABLESPACES
155 USER_TRIGGERS MY_TRIGGERS
156 USER_TYPE_ATTRS MY_TYPE_ATTRS
157 USER_TYPES MY_TYPES
158 USER_VIEWS MY_VIEWS
159 V$GLOBAL_TRANSACTION V$GLOBAL_TRANSACTION
160 V$NLS_PARAMETERS V$NLS_PARAMETERS
161 V$SESSION_WAIT V$SESSION_WAIT
162 V$SYSSTAT V$SYSSTAT
163 V$SYSTEM_EVENT V$SYSTEM_EVENT
164 V$VERSION V$VERSION
165 V$INSTANCE V_INSTANCE
166 GV$INSTANCE GV_INSTANCE
167 V$MYSTAT V_MYSTAT
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 232
序号 Oracle数据库 GaussDB数据库
168 V$SESSION V_SESSION
169 GV$SESSION GV_SESSION
170 V$SESSION_LONGOPS DV_SESSION_LONGOPS
171 V$SESSION DV_SESSIONS
172 ALL_ARGUMENTS DB_ARGUMENTS
173 USER_CONS_COLUMNS MY_CONS_COLUMNS
174 USER_PART_KEY_COLUMNS MY_PART_KEY_COLUMNS
175 USER_SUBPART_COL_STATISTICS MY_SUBPART_COL_STATISTI
CS
176 USER_ROLE_PRIVS MY_ROLE_PRIVS
177 DBA_TAB_PRIVS ADM_TAB_PRIVS
178 USER_SCHEDULER_JOBS MY_SCHEDULER_JOBS
179 V$LOCK V$LOCK
180 V$DBLINK V$DBLINK
181 V$OPEN_CURSOR V$OPEN_CURSOR
182 ALL_TAB_PRIVS DB_TAB_PRIVS
183 ALL_TAB_MODIFICATIONS DB_TAB_MODIFICATIONS
184 USER_TAB_MODIFICATIONS MY_TAB_MODIFICATIONS
185 USER_AUDIT_TRAIL MY_AUDIT_TRAIL
7.2.12 高级包
GaussDB数据库兼容的高级包如表1所示。
7-211 支持高级包列表
序号
Oracle数据库 GaussDB数据库 差异
1 DBMS_LOB DBE_LOB GaussDB具体用法请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) > DBE_LOB”章
节。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 233
序号 Oracle数据库 GaussDB数据库 差异
2 DBMS_RANDOM DBE_RANDOM GaussDB具体用法请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) >
DBE_RANDOM”章节。
3
DBMS_OUTPUT DBE_OUTPUT GaussDB具体用法请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) > DBE_OUTPUT
章节。
4
UTL_RAW DBE_RAW GaussDB具体用法请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) > DBE_RAW”章
节。
5
DBMS_SCHEDUL
ER
DBE_SCHEDULER GaussDB具体用法请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) >
DBE_SCHEDULER”章节。
6
DBMS_UTILITY DBE_UTILITY GaussDB具体用法请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) > DBE_UTILITY
章节。
7
DBMS_SQL DBE_SQL GaussDB具体用法请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) > DBE_SQL”章
节。
8
UTL_FILE DBE_FILE GaussDB具体用法请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) > DBE_FILE”章
节。
9
DBMS_SESSION DBE_SESSION GaussDB具体用法请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) > DBE_SESSION
章节。
10
UTL_MATCH DBE_MATCH GaussDB具体用法请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) > DBE_MATCH
章节。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 234
序号 Oracle数据库 GaussDB数据库 差异
11 DBMS_APPLICATI
ON_INFO
DBE_APPLICATIO
N_INFO
GaussDB具体用法请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) >
DBE_APPLICATION_INFO
章节。
12
DBMS_XMLDOM DBE_XMLDOM GaussDB中具体信息请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) >
DBE_XMLDOM”章节。
13
DBMS_XMLPARS
ER
DBE_XMLPARSER GaussDB中具体信息请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) >
DBE_XMLPARSER”章节。
14
DBMS_ILM DBE_ILM GaussDB中具体信息请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) > DBE_ILM”章
节。
15
DBMS_ILM_ADMI
N
DBE_ILM_ADMIN GaussDB中具体信息请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) >
DBE_ILM_ADMIN”章节。
16
DBMS_COMPRES
SION
DBE_COMPRESSI
ON
GaussDB中具体信息请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) >
DBE_COMPRESSION”章
节。
17
DBMS_HEAT_MA
P
DBE_HEAT_MAP GaussDB中具体信息请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) >
DBE_HEAT_MAP”章节。
18
DBMS_DESCRIBE DBE_DESCRIBE GaussDB中具体信息请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) >
DBE_DESCRIBE”章节。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 235
序号 Oracle数据库 GaussDB数据库 差异
19 DBMS_XMLGEN DBE_XMLGEN GaussDB中具体信息请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) > DBE_XMLGEN
章节。
20
DBMS_STATS DBE_STATS GaussDB中具体信息请参见
《开发指南》中“存储过程
> 高级包 > 二次封装接口
(推荐) > DBE_STATS”章
节。
7-212 DBMS_LOB 兼容性说明
序号 Oracle数据库 GaussDB数据库 差异
1 APPEND
Procedures
APPEND
Procedures
-
2 CLOB2FILE
Procedure
不支持 -
3 CLOSE Procedure BFILECLOSE
Procedure
GaussDB:参数类型为
BFILE,不存在函数重载。
Oracle:该过程存在3个重
载,3个重载的参数
lob_loclob_locle_loc
的类型分别为BLOBCLOB
CHARACTER SET ANY_CS
BFILE
4 COMPARE
Functions
COMPARE
Functions
GaussDB:存在3个重载函
数,对于第三个参数
len)均为BIGINT
Oracle:存在3个重载函
数,对于第三个参数
amount)均为
INTEGER
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 236
序号 Oracle数据库 GaussDB数据库 差异
5 CONVERTTOBLOB
Procedure
LOB_CONVERTTO
BLOB Procedure
GaussDB:该过程共有5
参数,且第345个参数
类型为BIGINT
Oracle:该过程共有8个参
数,在GaussDB所有参数的
基础上增加了blob_csid
lang_contextwarning3
参数,类型分别为
NUMBERINTEGER
INTEGER,且第345
参数类型为INTEGER
6 CONVERTTOCLOB
Procedure
LOB_CONVERTTO
CLOB Procedure
GaussDB:该过程共有5
参数。第345个参数类
型为BIGINT
Oracle:该过程共有8个参
数。第345个参数类型
INTEGEROracle的该过
程在GaussDB所有参数的基
础上增加了3个参
:blob_csidlang_context
warning,参数类型分别
NUMBERINTEGER
INTEGER
7 COPY Procedures LOB_COPY
Functions
-
8 COPY_DBFS_LINK
Procedures
不支持 -
9 COPY_FROM_DBF
S_LINK
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 237
序号 Oracle数据库 GaussDB数据库 差异
10 CREATETEMPORA
RY Procedures
CREATE_TEMPOR
ARY Procedures
GaussDB:该过程存在2
重载。第一个重载过程的第
一个参数(lob_loc)为
BLOB,第二个重载过程的
第一个参数(lob_loc)为
CLOB;两个重载过程的第
三个参数(dur)为
INTEGER,默认值为10
Oracle:该过程存在2个重
载。第一个重载过程的第一
个参数(lob_loc)为
BLOB,第二个重载过程的
第一个参数(lob_loc)为
CLOB;两个重载过程的第
三个参数(dur)的参数类
型为PLS_INTEGER,第一个
重载过程的dur默认值为
DBMS_LOB.SESSION,第
二个重载过程的dur默认值
10
11 DBFS_LINK_GENE
RATE_PATH
Functions
不支持
-
12 ERASE Procedures LOB_ERASE
Procedures
-
13 FILECLOSE
Procedure
不支持 -
14 FILECLOSEALL
Procedure
不支持 -
15 FILEEXISTS
Function
不支持 -
16 FILEGETNAME
Procedure
不支持 -
17 FILEISOPEN
Function
不支持 -
18 FILEOPEN
Procedure
不支持 -
19 FRAGMENT_DELE
TE Procedure
不支持 -
20 FRAGMENT_INSER
T Procedures
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 238
序号 Oracle数据库 GaussDB数据库 差异
21 FRAGMENT_MOV
E Procedure
不支持 -
22 FRAGMENT_REPL
ACE Procedures
不支持 -
23 FREETEMPORARY
Procedures
不支持 -
24 GET_DBFS_LINK
Functions
不支持 -
25 GET_DBFS_LINK_S
TATE Procedures
不支持 -
26 GETCHUNKSIZE
Functions
GETCHUNKSIZE
Functions
-
27 GETCONTENTTYP
E Functions
不支持 -
28 GETLENGTH
Functions
不支持 -
29 GETOPTIONS
Functions
不支持 -
30 GET_STORAGE_LI
MIT Function
不支持 -
31 INSTR Functions MATCH Functions GaussDB:存在3个重载函
数。3个重载函数的第三、
四个参数均为BIGINT
Oracle:存在3个重载函
数。3个重载函数的第三、
四个参数均为INTEGER
32 ISOPEN Functions 不支持 -
33 ISREMOTE
Function
不支持 -
34 ISSECUREFILE
Function
不支持 -
35 ISTEMPORARY
Functions
不支持 -
36 LOADBLOBFROMF
ILE Procedure
LOADBLOBFROMB
FILE Procedure
-
37 LOADCLOBFROMF
ILE Procedure
LOADCLOBFROMB
FILE Procedure
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 239
序号 Oracle数据库 GaussDB数据库 差异
38 LOADFROMFILE
Procedure
LOADFROMBFILE
Procedure
-
39 MOVE_TO_DBFS_L
INK Procedures
不支持 -
40 OPEN Procedures BFILEOPEN
Procedure
GaussDB:该过程不存在重
载。第一个参数(ble)类
型为DBE_LOB.BFILE,第二
个参数(open_mode)类
型为TEXT,且只支持read
模式。
Oracle:该过程存在3个重
载。第一个重载过程的第一
个参数(lob_loc)类型为
NOCOPY BLOB,第二个参
数(openmode)类型为
BINARY_INTEGER;第二个
重载过程的第一个参数
lob_loc)类型为
NOCOPY CLOB
CHARACTER SET
ANY_CS,第二个参数
openmode)类型为
BINARY_INTEGER;第三个
重载过程的第一个参数
le_loc)类型为
NOCOPY BFILE,第二个参数
openmode)类型为
BINARY_INTEGER,且只能
le_readonly
41
READ Procedures READ Procedures GaussDB:该过程存在2
重载。
Oracle:该过程存在3个重
载。其中前两个重载与
GaussDB无差异,第三个过
程重载包括4个参数:
le_locamountoset
buer,其类型分别为
BFILENOCOPY
INTEGERINTEGER
RAW
42 SET_DBFS_LINK
Procedures
不支持 -
43 SETCONTENTTYPE
Procedure
不支持 -
44 SETOPTIONS
Procedures
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 240
序号 Oracle数据库 GaussDB数据库 差异
45 SUBSTR Functions LOB_SUBSTR
Functions
-
46 TRIM Procedures STRIP Functions GaussDB:该过程存在2
重载。两个重载过程的第二
个参数(newlen)均为
BIGINT
Oracle:该过程存在2个重
载。两个重载过程的第二个
参数(newlen)均为
INTEGER
47 WRITE Procedures WRITE Functions -
48 WRITEAPPEND
Procedures
WRITEAPPEND
Functions
-
7-213 DBMS_RANDOM 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 INITIALIZE
Procedure
不支持 -
2 NORMAL
Function
不支持 -
3 RANDOM
Function
不支持 -
4 SEED Procedures DBE_RANDOM.SE
T_SEED Function
GaussDB:该函数无重载,
参数类型为INTEGER
Oracle:该过程存在2个重
载,2个重载过程的参数类型
分别为VARCHAR2
BINARY_INTEGER
5 STRING Function 不支持 -
6 TERMINATE
Procedure
不支持 -
7 VALUE Functions DBE_RANDOM.GE
T_VALUE Function
GaussDB:该函数无重载。
Oracle:存在无参数的
VALUE函数重载,返回
NUMBER类型。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 241
7-214 DBMS_OUTPUT 兼容性说明
序号 Oracle数据库 GaussDB数据库 差异
1 DISABLE
Procedure
DISABLE Function -
2 ENABLE
Procedure
ENABLE Function -
3 GET_LINE
Procedure
GET_LINE
Function
-
4 GET_LINES
Procedure
GET_LINES
Function
GaussDB:该函数无重载,
首个参数(lines)数据类型
VARCHAR[]
Oracle:该过程存在2个重
载,2个重载过程的首个参数
lines)分别为CHARARR
DBMSOUTPUT_LINESARRA
Y
5 NEW_LINE
Procedure
NEW_LINE
Function
-
6 PUT Procedure PUT Function GaussDB:当数据库服务端
字符集server_encoding不是
UTF8编码格式且入参的字符
编码是合法的UTF8编码时,
该函数不会区分入参的数据
类型,都会先把该字符编码
按照“UTF8 >
server_encoding”的转换关
系进行转换后再输出。
Oracle:当数据库服务端字
符集server_encoding不是
UTF8编码格式且入参的字符
编码是合法的UTF8编码时,
若入参类型是
NVARCHAR2,则该过程会
先把该字符编码按照“UTF8
> server_encoding”的转换
关系进行转换后再输出;若
入参为其他字符类型,则会
将该字符编码视作非法字
符,以占位符的形式输出。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 242
序号 Oracle数据库 GaussDB数据库 差异
7 PUT_LINE
Procedure
PUT_LINE
Function
GaussDB:当数据库服务端
字符集server_encoding不是
UTF8编码格式且入参的字符
编码是合法的UTF8编码时,
该函数不会区分入参的数据
类型,都会先把该字符编码
按照“UTF8 >
server_encoding”的转换关
系进行转换后再输出。
Oracle:当数据库服务端字
符集server_encoding不是
UTF8编码格式且入参的字符
编码是合法的UTF8编码时,
若入参类型是
NVARCHAR2,则该过程会
先把该字符编码按照“UTF8
> server_encoding”的转换
关系进行转换后再输出;若
入参为其他字符类型,则会
将该字符编码视作非法字
符,以占位符的形式输出。
7-215 UTL_RAW 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 BIT_AND Function BIT_AND Function -
2 BIT_COMPLEMEN
T Function
BIT_COMPLEMEN
T Function
-
3 BIT_OR Function BIT_OR Function GaussDB:两个参数类型被
定义为TEXT类型并且返回
TEXT类型。
Oracle:两个参数为RAW
型并且返回RAW类型。
4
BIT_XOR Function BIT_XOR Function -
5 CAST_FROM_BIN
ARY_DOUBLE
Function
CAST_FROM_BIN
ARY_DOUBLE_TO_
RAW Function
-
6 CAST_FROM_BIN
ARY_FLOAT
Function
CAST_FROM_BIN
ARY_FLOAT_TO_R
AW Function
GaussDB:参数nFLOAT4
类型。
Oracle:参数nFLOAT
型。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 243
序号 Oracle数据库 GaussDB数据库 差异
7 CAST_FROM_BIN
ARY_INTEGER
Function
CAST_FROM_BIN
ARY_INTEGER_TO
_RAW Function
GaussDB:参数value
BIGINT类型。
Oracle:参数value
INTEGER类型。
8
CAST_FROM_NU
MBER Function
CAST_FROM_NU
MBER_TO_RAW
Function
GaussDB:参数n
NUMERIC类型
Oracle:参数nNUMBER
类型。
9
CAST_TO_BINARY
_DOUBLE
Function
CAST_FROM_RAW
_TO_BINARY_DOU
BLE Function
-
10 CAST_TO_BINARY
_FLOAT Function
CAST_FROM_RAW
_TO_BINARY_FLO
AT Function
GaussDB:函数返回类型为
FLOAT4
Oracle:函数返回类型为
FLOAT
11
CAST_TO_BINARY
_INTEGER
Function
CAST_FROM_RAW
_TO_BINARY_INTE
GER Function
GaussDB:参数endianess
INTEGER类型,函数返回类
型为INTEGER
Oracle:参数endianess
PLS_INTEGER类型,函数返
回类型为
BINARY_INTEGER
12 CAST_TO_NUMBE
R Function
CAST_FROM_RAW
_TO_NUMBER
Function
GaussDB:函数返回类型为
NUMERIC
Oracle:函数返回类型为
NUMBER
13
CAST_TO_NVARC
HAR2 Function
CAST_FROM_RAW
_TO_NVARCHAR2
Function
-
14 CAST_TO_RAW
Function
CAST_FROM_VAR
CHAR2_TO_RAW
Function
-
15 CAST_TO_VARCH
AR2 Function
CAST_TO_VARCH
AR2 Function
-
16 COMPARE
Function
COMPARE
Function
GaussDB:函数返回类型为
INTEGER
Oracle:函数返回类型为
NUMBER
17
CONCAT Function CONCAT Function -
18 CONVERT
Function
CONVERT
Function
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 244
序号 Oracle数据库 GaussDB数据库 差异
19 COPIES Function COPIES Function GaussDB:参数n
NUMERIC类型。
Oracle:参数nNUMBER
类型。
20
LENGTH Function GET_LENGTH
Function
GaussDB:函数返回类型为
INTEGER
Oracle:函数返回类型为
NUMBER
21
OVERLAY
Function
OVERLAY
Function
-
22 REVERSE Function REVERSE Function -
23 SUBSTR Function SUBSTR Function GaussDB:参数lob_loc
BLOB类型;参数o_set
INTEGER类型,默认值为1
参数amountINTEGER
型,默认值为32767
Oracle:参数rRAW类型,
参数posBINARY_INTEGER
类型且无默认值,参数len
BINARY_INTEGER类型,默
认值为NULL
24 TRANSLATE
Function
TRANSLATE
Function
-
25 TRANSLITERATE
Function
TRANSLITERATE
Function
-
26 XRANGE Function XRANGE Function GaussDB:参数start_byte
end_byte无默认值。
Oracle:参数start_byte
end_byte默认为NULL
7-216 DBMS_SCHEDULER 兼容性说明
序号
Oracle数据库 GaussDB数据库
1 ADD_EVENT_QUEUE
_SUBSCRIBER
Procedure
不支持
2 ADD_GROUP_MEMB
ER Procedure
不支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 245
序号 Oracle数据库 GaussDB数据库
3 ADD_JOB_EMAIL_N
OTIFICATION
Procedure
不支持
4 ADD_TO_INCOMPAT
IBILITY Procedure
不支持
5 ALTER_CHAIN
Procedure
不支持
6 ALTER_RUNNING_C
HAIN Procedure
不支持
7 CLOSE_WINDOW
Procedure
不支持
8 COPY_JOB
Procedure
不支持
9 CREATE_CHAIN
Procedure
不支持
10 CREATE_CREDENTIA
L Procedure
CREATE_CREDENTIAL Procedure
11 CREATE_DATABASE_
DESTINATION
Procedure
不支持
12 CREATE_EVENT_SCH
EDULE Procedure
不支持
13 CREATE_FILE_WATC
HER Procedure
不支持
14 CREATE_GROUP
Procedure
不支持
15 CREATE_INCOMPATI
BILITY Procedure
不支持
16 CREATE_JOB
Procedure
CREATE_JOB Procedure
17 CREATE_JOB_CLASS
Procedure
CREATE_JOB_CLASS Procedure
18 CREATE_JOBS
Procedure
不支持
19 CREATE_PROGRAM
Procedure
CREATE_PROGRAM Procedure
20 CREATE_RESOURCE
Procedure
不支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 246
序号 Oracle数据库 GaussDB数据库
21 CREATE_SCHEDULE
Procedure
CREATE_SCHEDULE Procedure
22 CREATE_WINDOW
Procedure
不支持
23 DEFINE_ANYDATA_A
RGUMENT
Procedure
不支持
24 DEFINE_CHAIN_EVE
NT_STEP Procedure
不支持
25 DEFINE_CHAIN_RUL
E Procedure
不支持
26 DEFINE_CHAIN_STE
P Procedure
不支持
27 DEFINE_METADATA_
ARGUMENT
Procedure
不支持
28 DEFINE_PROGRAM_
ARGUMENT
Procedure
DEFINE_PROGRAM_ARGUMENT Procedure
29 DISABLE Procedure DISABLE Procedure
30 DROP_AGENT_DEST
INATION Procedure
不支持
31 DROP_CHAIN
Procedure
不支持
32 DROP_CHAIN_RULE
Procedure
不支持
33 DROP_CHAIN_STEP
Procedure
不支持
34 DROP_CREDENTIAL
Procedure
DROP_CREDENTIAL Procedure
35 DROP_DATABASE_D
ESTINATION
Procedure
不支持
36 DROP_FILE_WATCH
ER Procedure
不支持
37 DROP_GROUP
Procedure
不支持
38 DROP_INCOMPATIBI
LITY Procedure
不支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 247
序号 Oracle数据库 GaussDB数据库
39 DROP_JOB
Procedure
DROP_JOB Procedure
40 DROP_JOB_CLASS
Procedure
DROP_JOB_CLASS Procedure
41 DROP_PROGRAM
Procedure
DROP_PROGRAM Procedure
42 DROP_PROGRAM_A
RGUMENT
Procedure
不支持
43 DROP_SCHEDULE
Procedure
DROP_SCHEDULE Procedure
44 DROP_WINDOW
Procedure
不支持
45 ENABLE Procedure ENABLE Procedure
46 END_DETACHED_JO
B_RUN Procedure
不支持
47 EVALUATE_CALEND
AR_STRING
Procedure
EVALUATE_CALENDAR_STRING Procedure
48 EVALUATE_RUNNIN
G_CHAIN Procedure
不支持
49 GENERATE_JOB_NA
ME Function
GENERATE_JOB_NAME Function
50 GET_AGENT_INFO
Function
不支持
51 GET_AGENT_VERSIO
N Function
不支持
52 GET_ATTRIBUTE
Procedure
不支持
53 GET_FILE Procedure 不支持
54 GET_SCHEDULER_A
TTRIBUTE Procedure
不支持
55 OPEN_WINDOW
Procedure
不支持
56 PURGE_LOG
Procedure
不支持
57 PUT_FILE Procedure 不支持
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 248
序号 Oracle数据库 GaussDB数据库
58 REMOVE_EVENT_Q
UEUE_SUBSCRIBER
Procedure
不支持
59 REMOVE_FROM_IN
COMPATIBILITY
Procedure
不支持
60 REMOVE_GROUP_M
EMBER Procedure
不支持
61 REMOVE_JOB_EMAI
L_NOTIFICATION
Procedure
不支持
62 RESET_JOB_ARGUM
ENT_VALUE
Procedure
不支持
63 RUN_CHAIN
Procedure
不支持
64 RUN_JOB Procedure RUN_JOB Procedure
65 SET_AGENT_REGIST
RATION_PASS
Procedure
不支持
66 SET_ATTRIBUTE
Procedure
SET_ATTRIBUTE Procedure
67 SET_ATTRIBUTE_NU
LL Procedure
不支持
68 SET_JOB_ANYDATA_
VALUE Procedure
不支持
69 SET_JOB_ARGUMEN
T_VALUE Procedure
SET_JOB_ARGUMENT_VALUE Procedure
70 SET_JOB_ATTRIBUTE
S Procedure
不支持
71 SET_RESOURCE_CO
NSTRAINT
Procedure
不支持
72 SET_SCHEDULER_AT
TRIBUTE Procedure
不支持
73 STOP_JOB Procedure STOP_JOB Procedure
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 249
7-217 DBMS_UTILITY 兼容性说明
序号 Oracle数据库 GaussDB数据库 差异
1 ACTIVE_INSTANCE
S Procedure
不支持 -
2 ANALYZE_DATABA
SE Procedure
不支持 -
3 ANALYZE_PART_O
BJECT Procedure
不支持 -
4 ANALYZE_SCHEM
A Procedure
不支持 -
5 CANONICALIZE
Procedure
CANONICALIZE
Procedure
GaussDB:参数canon_len
默认为1024字节。
Oracle:参数canon_len无默
认值。
6
COMMA_TO_TABL
E Procedures
COMMA_TO_TABL
E Procedure
GaussDB:参数tab
VARCHAR2数组。
Oracle:该过程存在2个重
载。参数tab可以为两种类型
之一:一种为uncl_array
另一种为lname_array
7 COMPILE_SCHEM
A Procedure
不支持 -
8 CREATE_ALTER_TY
PE_ERROR_TABLE
Procedure
不支持
-
9 CURRENT_INSTAN
CE Function
不支持 -
10 DATA_BLOCK_AD
DRESS_BLOCK
Function
不支持
-
11 DATA_BLOCK_AD
DRESS_FILE
Function
不支持
-
12 DB_VERSION
Procedure
DB_VERSION
Procedure
GaussDB:只有参数
version,类型为
VARCHAR2Oracle:有参
versioncompatibility
类型均为VARCHAR2
13
EXEC_DDL_STATE
MENT Procedure
EXEC_DDL_STATE
MENT Function
GaussDB:参数parse_string
TEXT类型。
Oracle:参数parse_string
VARCHAR2类型。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 250
序号 Oracle数据库 GaussDB数据库 差异
14 EXPAND_SQL_TEX
T Procedure
EXPAND_SQL_TEX
T Function
GaussDB 参数
output_sql_textCLOB
Oracle:参数
output_sql_textNOCOPY
CLOB,通过传引用方式传递
OUT参数。
15 FORMAT_CALL_ST
ACK Function
FORMAT_CALL_ST
ACK Function
GaussDB:函数返回类型为
TEXT
Oracle:函数返回类型为
VARCHAR2
16
FORMAT_ERROR_
BACKTRACE
Function
FORMAT_ERROR_
BACKTRACE
Function
GaussDB:函数返回类型为
TEXT
Oracle:函数返回类型为
VARCHAR2
17
FORMAT_ERROR_
STACK Function
FORMAT_ERROR_
STACK Function
GaussDB:函数返回类型为
TEXT
Oracle:函数返回类型为
VARCHAR2
18
GET_CPU_TIME
Function
GET_CPU_TIME
Function
GaussDB:函数返回类型为
BIGINT
Oracle:函数返回类型为
NUMBER
19
GET_DEPENDENC
Y Procedure
不支持 -
20 GET_ENDIANNESS
Function
GET_ENDIANNESS
Function
GaussDB:函数返回类型为
INTEGER
Oracle:函数返回类型为
NUMBER
21
GET_HASH_VALU
E Function
GET_HASH_VALU
E Function
GaussDB:参数base
hash_size和返回类型均为
INTEGER
Oracle:参数base
hash_size和返回类型均为
NUMBER
22 GET_PARAMETER_
VALUE Function
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 251
序号 Oracle数据库 GaussDB数据库 差异
23 GET_SQL_HASH
Function
GET_SQL_HASH
Function
GaussDB:参数last4bytes
BIGINT类型,代表MD5
希值的最后四字节,以无符
号整数形式展现,函数返回
类型为BIGINT
Oracle:对应参数
pre10ihashNUMBER
型,用于存储MD5计算得到
16字节中的4字节哈希
值。
24 GET_TIME
Function
GET_TIME
Function
GaussDB:函数返回类型为
BIGINT
Oracle:函数返回类型为
NUMBER
25
GET_TZ_TRANSITI
ONS Procedure
不支持 -
26 INVALIDATE
Procedure
不支持 -
27 IS_BIT_SET
Function
IS_BIT_SET
Function
GaussDB:参数n和返回值
类型为INTEGER
Oracle:参数n和返回值类型
NUMBER
28
IS_CLUSTER_DATA
BASE Function
IS_CLUSTER_DATA
BASE Function
-
29 MAKE_DATA_BLO
CK_ADDRESS
Function
不支持
-
30 NAME_RESOLVE
Procedure
NAME_RESOLVE
Procedure
GaussDB:参数context
part1_typeINTEGER,参
object_numberOID
GaussDB不支持NUMBER
OID的隐式转换。
Oracle:参数context
part1_type
object_number均为
NUMBER
31 NAME_TOKENIZE
Procedure
NAME_TOKENIZE
Procedure
GaussDB:参数nextpos
INTEGER类型。
Oracle:参数nextpos
BINARY_INTEGER类型。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 252
序号 Oracle数据库 GaussDB数据库 差异
32 OLD_CURRENT_S
CHEMA Function
OLD_CURRENT_S
CHEMA Function
GaussDB:函数返回类型为
VARCHAR
Oracle:函数返回类型为
VARCHAR2
33
OLD_CURRENT_U
SER Function
OLD_CURRENT_U
SER Function
GaussDB:函数返回类型为
TEXT
Oracle:函数返回类型为
VARCHAR2
34
PORT_STRING
Function
不支持 -
35 SQLID_TO_SQLHA
SH Function
不支持 -
36 TABLE_TO_COMM
A Procedures
TABLE_TO_COMM
A Procedure
GaussDB:参数tab
VARCHAR2数组。
Oracle:该存储过程存在2
重载。参数tab可以为两种类
型之一:一种为
uncl_array,另一种为
lname_array
37 VALIDATE
Procedure
不支持 -
38 WAIT_ON_PENDI
NG_DML Function
不支持 -
7-218 DBMS_SQL 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 BIND_ARRAY
Procedures
SQL_BIND_ARRAY
Function
-
2 BIND_VARIABLE
Procedures
SQL_BIND_VARIA
BLEFunction
-
3 BIND_VARIABLE_P
KG Procedure
不支持 -
4 CLOSE_CURSOR
Procedure
SQL_UNREGISTER
_CONTEXT
Function
-
5 COLUMN_VALUE
Procedure
GET_RESULT
Procedure
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 253
序号 Oracle数据库 GaussDB数据库 差异
6 COLUMN_VALUE_
LONG Procedure
不支持 -
7 DEFINE_ARRAY
Procedure
SET_RESULTS_TYP
E Procedure
-
8 DEFINE_COLUMN
Procedures
SET_RESULT_TYPE
Procedure
-
9 DEFINE_COLUMN
_CHAR Procedure
不支持 -
10 DEFINE_COLUMN
_LONG Procedure
不支持 -
11 DEFINE_COLUMN
_RAW Procedure
不支持 -
12 DEFINE_COLUMN
_ROWID
Procedure
不支持
-
13 DESCRIBE_COLU
MNS Procedure
DESCRIBE_COLU
MNS Procedure
-
14 DESCRIBE_COLU
MNS2 Procedure
不支持 -
15 DESCRIBE_COLU
MNS3 Procedure
不支持 -
16 EXECUTE Function SQL_RUN
Function
-
17 EXECUTE_AND_FE
TCH Function
RUN_AND_NEXT
Function
-
18 FETCH_ROWS
Function
NEXT_ROW
Function
-
19 GET_NEXT_RESUL
T Procedures
不支持 -
20 IS_OPEN Function IS_ACTIVE
Function
-
21 LAST_ERROR_POS
ITION Function
不支持 -
22 LAST_ROW_COU
NT Function
LAST_ROW_COU
NT Function
-
23 LAST_ROW_ID
Function
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 254
序号 Oracle数据库 GaussDB数据库 差异
24 LAST_SQL_FUNCT
ION_CODE
Function
不支持
-
25 OPEN_CURSOR
Functions
REGISTER_CONTE
XT Function
-
26 PARSE Procedures 支持,有差异。 GaussDB中为SQL_SET_SQL
Function,不支持重载。
27 RETURN_RESULT
Procedures
不支持 -
28 TO_CURSOR_NU
MBER Function
不支持 -
29 TO_REFCURSOR
Function
不支持 -
30 VARIABLE_VALUE
Procedures
GET_VARIABLE_RE
SULT Procedures
-
31 VARIABLE_VALUE_
PKG Procedure
不支持 -
7-219 DBMS_SQL 数据类型兼容性说明
序号
Oracle数据库 GaussDB数据库
1 DBMS_SQL DESC_REC DBE_SQL.DESC_REC
2 DBMS_SQL DATE_TABLE DBE_SQL.DATE_TABLE
3 DBMS_SQL
NUMBER_TABLE
DBE_SQL.NUMBER_TABLE
4 DBMS_SQL
VARCHAR2_TABLE
DBE_SQL.VARCHAR2_TABLE
5 DBMS_SQL BLOB_TABLE DBE_SQL.BLOB_TABLE
7-220 UTL_FILE 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 FCLOSE Procedure CLOSE Procedure -
2 FCLOSE_ALL
Procedure
CLOSE_ALL
Procedure
-
3 FCOPY Procedure COPY Procedure -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 255
序号 Oracle数据库 GaussDB数据库 差异
4 FFLUSH Procedure FLUSH Procedure -
5 FGETATTR
Procedure
GET_ATTR
Procedure
-
6 FGETPOS
Function
GET_POS Function -
7 FOPEN Function FOPEN Function -
8 FOPEN_NCHAR
Function
FOPEN_NCHAR
Function
-
9 FREMOVE
Procedure
REMOVE
Procedure
-
10 FRENAME
Procedure
RENAME
Procedure
-
11 FSEEK Procedure SEEK Procedure -
12 GET_LINE
Procedure
READ_LINE
Procedure
-
13 GET_LINE_NCHAR
Procedure
READ_LINE_NCHA
R Procedure
-
14 GET_RAW
Procedure
GET_RAW
Procedure
-
15 IS_OPEN Function IS_OPEN Function -
16 NEW_LINE
Procedure
支持,有差异,
NEW_LINE
Function
GaussDB将接口定义为
Function
17 PUT Procedure 支持,有差异,
WRITE Function
GaussDB将接口定义为
Function
18 PUT_LINE
Procedure
支持,有差异,
WRITE_LINE
Function
GaussDB将接口定义为
Function
19 PUT_LINE_NCHAR
Procedure
支持,有差异,
WRITE_LINE_NCH
AR Function
GaussDB将接口定义为
Function
20 PUT_NCHAR
Procedure
支持,有差异,
WRITE_NCHAR
Function
GaussDB将接口定义为
Function
21 PUTF Procedure 支持,有差异,
FORMAT_WRITE
Function
GaussDB将接口定义为
Function
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 256
序号 Oracle数据库 GaussDB数据库 差异
22 PUTF_NCHAR
Procedure
支持,有差异,
FORMAT_WRITE_
NCHAR Function
GaussDB将接口定义为
Function
23 PUT_RAW
Procedure
支持,有差异,
PUT_RAW
Function
GaussDB将接口定义为
Function
7-221 DBMS_SESSION 兼容性说明
序号 Oracle数据库 GaussDB数据库 差异
1 CLEAR_ALL_CONT
EXT Procedure
不支持 -
2 CLEAR_CONTEXT
Procedure
CLEAR_CONTEXT
Function
-
3 CLEAR_IDENTIFIE
R Procedure
不支持 -
4 CLOSE_DATABASE
_LINK Procedure
不支持 -
5 CURRENT_IS_ROL
E_ENABLED
Function
不支持
-
6 FREE_UNUSED_U
SER_MEMORY
Procedure
不支持
-
7 GET_PACKAGE_M
EMORY_UTILIZATI
ON Procedure
不支持
-
8 IS_ROLE_ENABLE
D Function
不支持 -
9 IS_SESSION_ALIVE
Function
不支持 -
10 LIST_CONTEXT
Procedures
不支持 -
11 MODIFY_PACKAG
E_STATE
Procedure
MODIFY_PACKAG
E_STATE
Procedure
GaussDB:仅支持入参ags
= 1的场景使用。
Oracle:支持ags=1
ags= 2的场景使用。
12
RESET_PACKAGE
Procedure
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 257
序号 Oracle数据库 GaussDB数据库 差异
13 SESSION_IS_ROLE
_ENABLED
Function
不支持
-
14 SESSION_TRACE_
DISABLE
Procedure
不支持
-
15 SESSION_TRACE_
ENABLE
Procedure
不支持
-
16 SET_CONTEXT
Procedure
SET_CONTEXT
Function
GaussDB:仅包括参数
namspaceattribute
value,类型均为text
Oracle:包括参数
namspaceattribute
valueusername
client_id,类型均为
VARCHAR2
17 SET_EDITION_DEF
ERRED Procedure
不支持 -
18 SET_IDENTIFIER
Procedure
不支持 -
19 SET_NLS
Procedure
不支持 -
20 SET_ROLE
Procedure
不支持 -
21 SET_SQL_TRACE
Procedure
不支持 -
22 SLEEP Procedure 不支持 -
23 SWITCH_CURREN
T_CONSUMER_GR
OUP Procedure
不支持
--
24 UNIQUE_SESSION
_ID Function
不支持 -
7-222 UTL_MATCH 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 EDIT_DISTANCE
Function
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 258
序号 Oracle数据库 GaussDB数据库 差异
2 EDIT_DISTANCE_S
IMILARITY
Function
EDIT_DISTANCE_S
IMILARITY
Function
GaussDB:参数str1str2
TEXT类型,函数返回类型
INTEGER
Oracle:参数s1s2
VARCHAR2类型,函数返回
类型为PLS_INTEGER
3 JARO_WINKLER
Function
不支持 -
4 JARO_WINKLER_SI
MILARITY
Function
不支持
-
7-223 DBMS_APPLICATION_INFO 兼容性说明
序号 Oracle数据库 GaussDB数据库 差异
1 READ_CLIENT_INF
O Procedure
READ_CLIENT_INF
O Function
GaussDB:参数client_info
TEXT类型。
Oracle:参数client_info
VARCHAR2类型。
2
READ_MODULE
Procedure
READ_MODULE
Procedure
GaussDB:参数
module_name
action_nameTEXT类型。
Oracle:参数
module_name
action_nameVARCHAR2
类型。
3 SET_ACTION
Procedure
SET_ACTION
Procedure
GaussDB:参数
action_nameTEXT类型。
Oracle:参数action_name
VARCHAR2类型。
4
SET_CLIENT_INFO
Procedure
SET_CLIENT_INFO
Function
GaussDB:参数strTEXT
型,且返回类型为void
Oracle:参数client_info
VARCHAR2类型,无返回
值。二者均为写入客户端信
息,最大输入64字节,超过
64字节将被截断。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 259
序号 Oracle数据库 GaussDB数据库 差异
5 SET_MODULE
Procedure
SET_MODULE
Procedure
GaussDB:参数
module_name
action_nameTEXT类型。
Oracle:参数
module_name
action_nameVARCHAR2
类型。
6 SET_SESSION_LO
NGOPS Procedure
不支持 -
7-224 DBMS_XMLDOM 兼容性说明
Oracle数据库 GaussDB数据库 差异
1 DBMS_XMLDOM.APP
ENDCHILD
DBE_XMLDOM.A
PPENDCHILD
GaussDBDOCUMENT类型
节点下APPEND ATTR类型节
点会报“operation not
support”错误。
Oracle:在此场景下不报
错,但实际并没有挂载成
功。
GaussDBATTR类型节点下
APPEND ATTR类型节点会报
operation not support
错误。
Oracle:在此场景下不报
错,但实际并没有挂载成
功。
GaussDB:父节点在添加多
ATTR类型子节点时,不允
KEY值相同的子节点同时
存在于同一个父节点下。
Oracle:允许KEY值相同的子
节点同时存在于同一个父节
点下。
2
DBMS_XMLDOM.CRE
ATEELEMENT
DBE_XMLDOM.C
REATEELEMENT
-
3 DBMS_XMLDOM.CRE
ATETEXTNODE
DBE_XMLDOM.C
REATETEXTNOD
E
-
4 DBMS_XMLDOM.FRE
EDOCUMENT
DBE_XMLDOM.F
REEDOCUMENT
GaussDB:释放时不会立刻释放
对象,累积一定数量后释放。
document下全部节点失效。
Oracle:立即释放对象。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 260
Oracle数据库 GaussDB数据库 差异
5 DBMS_XMLDOM.FRE
EELEMENT
DBE_XMLDOM.F
REEELEMENT
-
6 DBMS_XMLDOM.FRE
ENODE
DBE_XMLDOM.F
REENODE
-
7 DBMS_XMLDOM.FRE
ENODELIST
DBE_XMLDOM.F
REENODELIST
GaussDBnodelist会被释放。
Oracle:释放nodelist后,在原
始的doc中还能被查询到。
8
DBMS_XMLDOM.GET
ATTRIBUTE
DBE_XMLDOM.G
ETATTRIBUTE
-
9 DBMS_XMLDOM.GET
ATTRIBUTES
DBE_XMLDOM.G
ETATTRIBUTES
-
10 DBMS_XMLDOM.GET
CHILDNODES
DBE_XMLDOM.G
ETCHILDNODES
GaussDB:对documentnode
使用时会包含dtd
Oracle:不包含dtd
11
DBMS_XMLDOM.GET
CHILDRENBYTAGNA
ME
DBE_XMLDOM.G
ETCHILDRENBYT
AGNAME
GaussDB
DBE_XMLDOM.GETCHILDREN
BYTAGNAME接口的参数ns不支
持传入参数" * ",如需获取节点
下全部属性,可使用
DBE_XMLDOM.GETCHILDNOD
ES接口。
Oracle:支持传入参数" * "
12 DBMS_XMLDOM.GET
DOCUMENTELEMEN
T
DBE.XMLDOM.G
ETDOCUMENTEL
EMENT
-
13 DBMS_XMLDOM.GET
FIRSTCHILD
DBE_XMLDOM.G
ETFIRSTCHILD
-
14 DBMS_XMLDOM.GET
LASTCHILD
DBE_XMLDOM.G
ETLASTCHILD
-
15 DBMS_XMLDOM.GET
LENGTH
DBE_XMLDOM.G
ETLENGTH
-
16 DBMS_XMLDOM.GET
LOCALNAME
DBE_XMLDOM.G
ETLOCALNAME
-
17 DBMS_XMLDOM.GET
NAMEDITEM
DBE_XMLDOM.G
ETNAMEDITEM
-
18 DBMS_XMLDOM.GET
NEXTSIBLING
DBE_XMLDOM.G
ETNEXTSIBLING
-
19 DBMS_XMLDOM.GET
NODENAME
DBE_XMLDOM.G
ETNODENAME
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 261
Oracle数据库 GaussDB数据库 差异
20 DBMS_XMLDOM.GET
NODETYPE
DBE_XMLDOM.G
ETNODETYPE
-
21 DBMS_XMLDOM.GET
TAGNAME
DBE_XMLDOM.G
ETTAGNAME
-
22 DBMS_XMLDOM.IMP
ORTNODE
DBE_XMLDOM.I
MPORTNODE
-
23 DBMS_XMLDOM.ISN
ULL
DBE_XMLDOM.IS
NULL
GaussDB:入参为
DOMNODELIST类型时,若对
象在哈希表中不存在会发生报
错。
Oracle:不会报错。
24
DBMS_XMLDOM.ITE
M
DBE_XMLDOM.IT
EM
-
25 DBMS_XMLDOM.MA
KENODE
DBE_XMLDOM.
MAKENODE
GaussDB:该函数不支持直接作
为函数返回值返回。
Oracle:支持直接作为函数返回
值返回。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 262
Oracle数据库 GaussDB数据库 差异
26 DBMS_XMLDOM.NE
WDOMDOCUMENT
DBE_XMLDOM.N
EWDOMDOCUM
ENT
GaussDB:入参大小需限制
2GB以内。
Oracle:与CLOB类型大小一
致。
GaussDB目前暂不支持外部
DTD解析。
Oracle:支持解析外部
DTD
GaussDB
newdomdocument创建的
doc,默认UTF-8字符集。
Oracle:根据服务端字符集
生成。
GaussDB从同一个xmltype
例中解析出的每一个doc都是
独立的,对doc的修改也不会
影响到xmltype
Oracle:从同一个xmltype
例中解析出的每一个doc不独
立,有关联关系。
GaussDB version字段只支持
1.01.0-1.9解析警告但正常
执行,1.9以上报错。
Oracle:不报错。
GaussDBOracle数据库
DTD校验差异:!ATTLIST to
type (CHECK|check|Check)
"Ch..."将报错,因默认值
"Ch..."不属于括号中枚举
值,而Oracle数据库不报
错。<!ENTITY baidu
"www.baidu.com">......
&Baidu;&writer将报错,因
区分字母大小写,Baidu无法
baidu对应。
Oracle:不报错。
GaussDB Oracle数据库命
名空间校验差异:解析未声
明的命名空间标签正常执
行。
Oracle:报错。
27
DBMS_XMLDOM.SET
ATTRIBUTE
DBE_XMLDOM.S
ETATTRIBUTE
GaussDB:属性key不支持为
null或空字符串。
Oracle:属性key允许为null
空字符串。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 263
Oracle数据库 GaussDB数据库 差异
28 DBMS_XMLDOM.SET
CHARSET
DBE_XMLDOM.S
ETCHARSET
GaussDB目前支持的字符集有:
UTF-8UTF-16UCS-4
UCS-2ISO-8859-1
ISO-8859-2ISO-8859-3
ISO-8859-4ISO-8859-5
ISO-8859-6ISO-8859-7
ISO-8859-8ISO-8859-9
ISO-2022-JPShift_JISEUC-
JPASCII。输入其他字符集会
报错或者可能导致输出乱码。
29 DBMS_XMLDOM.SET
DOCTYPE
DBE_XMLDOM.S
ETDOCTYPE
GaussDB namesysidpubid
的总长度限制在32500个字节以
内。
Oracle:限制在32767字节内。
30
DBMS_XMLDOM.WRI
TETOBUFFER
DBE_XMLDOM.
WRITETOBUFFER
GaussDB writetobuer输出
buer限制在1GB以内。
Oracle:限制在32767字节
内。
GaussDB输出doc将包含XML
声明versionencoding
Oracle:用户不主动指定将
不包含。
GaussDB入参为domnode
型时,如果节点是doc转换
的,输出节点将包含XML
versionencoding
Oracle:用户不主动指定将
不包含。
GaussDB默认以UTF-8字符
集输出xml
Oracle:根据数据库字符集
生成。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 264
Oracle数据库 GaussDB数据库 差异
31 DBMS_XMLDOM.WRI
TETOCLOB
DBE_XMLDOM.
WRITETOCLOB
GaussDB writetoclob大小支
1GB以内。
Oracle:按CLOB大小支持。
GaussDB输出doc将包含XML
声明versionencoding
Oracle:用户不主动指定将
不包含。
GaussDB入参为domnode
型时,如果节点是doc转换
的,输出节点将包含XML
versionencoding
Oracle:用户不主动指定将
不包含。
GaussDB 默认以UTF-8字符
集输出xml
Oracle:根据数据库字符集
生成。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 265
Oracle数据库 GaussDB数据库 差异
32 DBMS_XMLDOM.WRI
TETOFILE
DBE_XMLDOM.
WRITETOFILE
GaussDB document入参,
lename长度限制在255个字
节以内,charset请参考
dbe_xmldom.setcharset
口。
Oraclelename长度限制
受操作系统影响,大于255
字节。
GaussDB domnode入参,
lename长度限制在255个字
节以内,charset请参考
dbe_xmldom.setcharset
口。
Oraclelename长度限制
受操作系统影响,大于255
字节。
GaussDB该函数会添加缩进
等内容,将输出格式化。输
doc将包含XML声明
versionencoding。入参为
domnode类型时,如果节点
doc转换的,输出节点将包
XML声明version
encoding
Oracle:用户不主动指定将
不包含。
GaussDB传入
newdomdocument()无参创
建的doc,在不指定charset
时不会报错,默认UTF-8
符集。
Oracle:会进行报错。
GaussDB lename需要在
pg_directory中创建的路径
下,lename中的\会被转换
/,只允许存在一个/。文
件名格式应为
pg_directory_name/
le_name
Oracle:按用户输入不进行
转义。
33
DBMS_XMLDOM.GET
NODEVALUE
DBE_XMLDOM.G
ETNODEVALUE
-
34 DBMS_XMLDOM.GET
PARENTNODE
DBE_XMLDOM.G
ETPARENTNODE
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 266
Oracle数据库 GaussDB数据库 差异
35 DBMS_XMLDOM.HAS
CHILDNODES
DBE_XMLDOM.H
ASCHILDNODES
-
36 DBMS_XMLDOM.MA
KEELEMENT
DBE_XMLDOM.
MAKEELEMENT
-
37 DBMS_XMLDOM.SET
NODEVALUE
DBE_XMLDOM.S
ETNODEVALUE
GaussDB nodeValue入参,
可以输入空字符串和NULL
值,但不会对节点值进行修
改。
Oracle:空字符串和NULL
将节点值修改为空字符串。
GaussDB nodeValue入参,
暂不支持转义字符'&',如字
符串中包含该转义字符,会
清空节点值。
Oracle:支持转义字符。
38 DBMS_XMLDOM.GET
ELEMENTSBYTAGNA
ME
DBE_XMLDOM.G
ETELEMENTSBYT
AGNAME
-
7-225 DBMS_XMLPARSER 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 DBMS_XMLPARSE
R.FREEPARSER
DBE_XMLPARSER.
FREEPARSER
-
2 DBMS_XMLPARSE
R.GETDOCUMENT
DBE_XMLPARSER.
GETDOCUMENT
-
3 DBMS_XMLPARSE
R.GETVALIDATIO
NMODE
DBE_XMLPARSER.
GETVALIDATION
MODE
-
4 DBMS_XMLPARSE
R.NEWPARSER
支持,有差异,
DBE_XMLPARSER.
NEWPARSER
GaussDBparser对象的数
量上限为16777215Oracle
数据库中约为1亿。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 267
序号 Oracle数据库 GaussDB数据库 差异
5 DBMS_XMLPARSE
R.PARSEBUFFER
支持,有差异,
DBE_XMLPARSER.
PARSEBUFFER
1. Oracle数据库解析字段
差异:
字符串encoding只支持
UTF-8version字段只支持
1.01.0-1.9解析警告但正
常执行,1.9以上报错。
2. Oracle数据库命名空间
校验差异:解析未声明的命
名空间标签正常执行,而
Oracle数据库会报错。
3. Oracle数据库xml预定
义实体解析差异:
&apos;&quot;会被解析转译
为字符’”,而Oracle数据
库中预定义实体统一都没有
转译为字符。
4. Oracle数据库DTD校验
差异:
!ATTLIST to type
(CHECK|check|Check)
"Ch..."将报错,因默认值
"Ch..."不属于括号中枚举
值,而Oracle数据库不报
错。
<!ENTITY baidu
"www.baidu.com">......
&Baidu;&writer将报错,
因区分字母大小写,
Baidu无法与baidu
应,而Oracle数据库不报
错。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 268
序号 Oracle数据库 GaussDB数据库 差异
6 DBMS_XMLPARSE
R.PARSECLOB
支持,有差异,
DBE_XMLPARSER.
PARSECLOB
1. PARSECLOB不支持解析大
于等于2GBclob
2. Oracle数据库解析字段
差异:
字符串encoding只支持
UTF-8version字段只支持
1.01.0-1.9解析警告但正
常执行,1.9以上报错。
3. Oracle数据库命名空间
校验差异:解析未声明的命
名空间标签正常执行,而
Oracle数据库会报错。
4. Oracle数据库xml预定
义实体解析差异:
&apos;&quot;会被解析转译
为字符’”,而Oracle数据
库预定义实体统一都没有转
译为字符。
5. Oracle数据库DTD校验
差异:
!ATTLIST to type
(CHECK|check|Check)
"Ch..."将报错,因默认值
"Ch..."不属于括号中枚举
值,而Oracle数据库不报
错。
<!ENTITY baidu
"www.baidu.com">......
&Baidu;&writer将报错,
因区分字母大小写,
Baidu无法与baidu
应,而Oracle数据库不报
错。
7
DBMS_XMLPARSE
R.SETVALIDATION
MODE
DBE_XMLPARSER.
SETVALIDATIONM
ODE
-
7-226 DBMS_ILM 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 DBMS_ILM.ADD_T
O_ILM
不支持 -
2 DBMS_ILM.ARCHI
VESTATENAME
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 269
序号 Oracle数据库 GaussDB数据库 差异
3 DBMS_ILM.EXECU
TE_ILM
支持,有差异,
DBE_ILM.EXECUTE
_ILM
GaussDB数据库的入参
schemaOracle数据库
中对应为owner
GaussDB数据库不支持指
ilm_scope(一次指定
多个对象)的操作。
4 DBMS_ILM.EXECU
TE_ILM_TASK
不支持 -
5 DBMS_ILM.PREVI
EW_ILM
不支持 -
6 DBMS_ILM.REMO
VE_FROM_ILM
不支持 -
7 DBMS_ILM.STOP_
ILM
DBE_ILM.STOP_IL
M
-
7-227 DBMS_ILM_ADMIN 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 DBMS_ILM_ADMI
N.CLEAR_HEAT_
MAP_ALL
不支持
-
2 DBMS_ILM_ADMI
N.CLEAR_HEAT_
MAP_TABLE
不支持
-
3 DBMS_ILM_ADMI
N.CUSTOMIZE_IL
M
支持,有差异,
DBE_ILM_ADMIN.
CUSTOMIZE_ILM
入参parameter取值对应的
特性参数存在差异。
GaussDB数据库param取值
支持1271112
131415GaussDB数据
param取值为14时,对应
的特性参数为
WIND_DURATION,用于控
制自动调度中执行窗口的持
续时长,而ORACLE数据库
对应的特性参数则为
AUTO_OPTIMIZE_INACTIVI
TY_THRESHOLD,其表示
ado的不活动时间长度。
4 DBMS_ILM_ADMI
N.DISABLE_ILM
DBE_ILM_ADMIN.
DISABLE_ILM
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 270
序号 Oracle数据库 GaussDB数据库 差异
5 DBMS_ILM_ADMI
N.ENABLE_AUTO_
OPTIMIZE
不支持
-
6 DBMS_ILM_ADMI
N.ENABLE_ILM
DBE_ILM_ADMIN.
ENABLE_ILM
-
7 DBMS_ILM_ADMI
N.
IGNORE_AUTO_O
PTIMIZE_
CRITERIA
不支持
-
8 DBMS_ILM_ADMI
N.SET_HEAT_MAP
_ALL
不支持
-
9 DBMS_ILM_ADMI
N.SET_HEAT_MAP
_START
不支持
-
10 DBMS_ILM_ADMI
N.SET_HEAT_MAP
_TABLE
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 271
7-228 DBMS_COMPRESSION 兼容性说明
序号 Oracle数据库 GaussDB数据库 差异
1 DBMS_COMPRESS
ION.GET_COMPRE
SSION_RATIO
支持,有差异,
DBE_COMPRESSI
ON.GET_COMPRE
SSION_RATIO
GaussDB不支持LOBs
压缩率获取。
对于单个对象的压缩率获
取:
GaussDB入参
comptype取值仅支持
1(未压缩)和2(高
级压缩),Oracle
支持10242048等取
值。
GaussDB入参objtype
取值仅支持1(表对
象),而Oracle还支
2(索引对象)。
Oracle数据库使用
subset_numrows参数
直接来决定采样的行
数(即为参数的取
值),而GaussDB
使用sample_ratio
(采样率)来间接确
定采样的行数。
2
DBMS_COMPRESS
ION.GET_COMPRE
SSION_TYPE
支持,有差异,
DBE_COMPRESSI
ON.GET_COMPRE
SSION_TYPE
Oracle使用rowid来指定
待获取压缩类型的行,而
GaussDB则是使用行的
ctid来指定。
返回值为comptype,其
取值差异同
GET_COMPRESSION_RA
TIO
7-229 DBMS_HEAT_MAP 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 DBMS_HEAT_MA
P.BLOCK_HEAT_M
AP
不支持
-
2 DBMS_HEAT_MA
P.EXTENT_HEAT_
MAP
不支持
-
3 DBMS_HEAT_MA
P.OBJECT_HEAT_
MAP
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 272
序号 Oracle数据库 GaussDB数据库 差异
4 DBMS_HEAT_MA
P.SEGMENT_HEAT
_MAP
不支持
-
5 DBMS_HEAT_MA
P.TABLESPACE_HE
AT_MAP
不支持
-
6 不支持 DBE_HEAT_MAP.R
OW_HEAT_MAP
详见《开发指南》中“存储
过程> 高级包 > 二次封装接
口(推荐)>
DBE_HEAT_MAP”章节。
7-230 DBMS_DESCRIBE 兼容性说明
序号 Oracle数据库 GaussDB数据库 差异
1 DBMS_DESCRIBE.
DESCRIBE_PROCE
DURE
支持,有差异,
DBE_DESCRIBE.DE
SCRIBE_PROCEDU
RE
datatype参数与O存在差
异,GaussDB返回数据类
型的oidO数据库返回O
数据库内部的数据类型的
编号。
datalength
dataprecisionscale
GaussDB创建存储过程或
函数时无法保留类型的约
束(如number(7,2)
varchar2(20)等),该三
个参数置0处理;Oracle
可使用%type方法获得带
约束的数据类型。
具体的行为差异详见《开
发指南》>“存储过程 >
高级包 > 二次封装接口
(推荐) >
DBE_DESCRIBE”章节。
7-231 DBMS_STATS 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 DBMS_STATS.ALT
ER_STATS_HISTO
RY_RETENTION
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 273
序号 Oracle数据库 GaussDB数据库 差异
2 DBMS_STATS.CA
NCEL_ADVISOR_T
ASK
不支持
-
3 DBMS_STATS.CO
NFIGURE_ADVISO
R_FILTER
不支持
-
4 DBMS_STATS.CO
NFIGURE_ADVISO
R_OBJ_FILTER
不支持
-
5 DBMS_STATS.CO
NFIGURE_ADVISO
R_OPR_FILTER
不支持
-
6 DBMS_STATS.CO
NFIGURE_ADVISO
R_RULE_FILTER
不支持
-
7 DBMS_STATS.CRE
ATE_ADVISOR_TA
SK
不支持
-
8 DBMS_STATS.CO
NVERT_RAW_VAL
UE
不支持
-
9 DBMS_STATS.CO
NVERT_RAW_VAL
UE_NVARCHAR
不支持
-
10 DBMS_STATS.CO
NVERT_RAW_VAL
UE_ROWID
不支持
-
11 DBMS_STATS.COP
Y_TABLE_STATS
不支持 -
12 DBMS_STATS.CRE
ATE_EXTENDED_S
TATS
不支持
-
13 DBMS_STATS.CRE
ATE_STAT_TABLE
DBE_STATS.CREAT
E_STAT_TABLE
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 274
序号 Oracle数据库 GaussDB数据库 差异
14 DBMS_STATS.DEL
ETE_COLUMN_ST
ATS
DBE_STATS.DELET
E_COLUMN_STAT
S
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
GaussDB中,使用该接口
可以设置表达式统计信
息,但tabname应传该表
达式对应的索引名。
15 DBMS_STATS.DEL
ETE_DATABASE_P
REFS
不支持
-
16 DBMS_STATS.DEL
ETE_DATABASE_S
TATS
不支持
-
17 DEDBMS_STATS.D
ELETE_DICTIONA
RY_STATS
不支持
-
18 DBMS_STATS.DEL
ETE_FIXED_OBJEC
TS_STATS
不支持
-
19 DBMS_STATS.DEL
ETE_INDEX_STATS
DBE_STATS.DELET
E_INDEX_STATS
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
20 DBMS_STATS.DEL
ETE_PENDING_ST
ATS
不支持
-
21 DBMS_STATS.DEL
ETE_PROCESSING
_RATE
不支持
-
22 DBMS_STATS.DEL
ETE_SCHEMA_PR
EFS
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 275
序号 Oracle数据库 GaussDB数据库 差异
23 DBMS_STATS.DEL
ETE_SCHEMA_ST
ATS
DBE_STATS.DELET
E_SCHEMA_STATS
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
24 DBMS_STATS.DEL
ETE_SYSTEM_STA
TS
不支持
-
25 DBMS_STATS.DEL
ETE_TABLE_PREFS
不支持 -
26 DBMS_STATS.DEL
ETE_TABLE_STATS
DBE_STATS.DELET
E_TABLE_STATS
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
27 DBMS_STATS.DIF
F_TABLE_STATS_I
N_HISTORY
不支持
-
28 DBMS_STATS.DIF
F_TABLE_STATS_I
N_PENDING
不支持
-
29 DBMS_STATS.DIF
F_TABLE_STATS_I
N_STATTAB
不支持
-
30 DBMS_STATS.DR
OP_ADVISOR_TAS
K
不支持
-
31 DBMS_STATS.DR
OP_EXTENDED_S
TATS
不支持
-
32 DBMS_STATS.DR
OP_STAT_TABLE
DBE_STATS.DROP
_STAT_TABLE
-
33 DBMS_STATS.EXE
CUTE_ADVISOR_T
ASK
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 276
序号 Oracle数据库 GaussDB数据库 差异
34 DBMS_STATS.EXP
ORT_COLUMN_ST
ATS
DBE_STATS.EXPO
RT_COLUMN_STA
TS
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
导出的列级统计信息与
pg_statistic表保持一致,
多列和pg_statistic_ext
保持一致。
支持导出索引表达式统计
信息。要求tabname传的
是索引名称,colname
的是索引表达式名称。
权限:需要具有查询表的
analyze权限以及stattab
表的siud权限。
35 DBMS_STATS.EXP
ORT_DATABASE_
PREFS
不支持
-
36 DBMS_STATS.EXP
ORT_DATABASE_S
TATS
不支持
-
37 DBMS_STATS.EXP
ORT_DICTIONARY
_STATS
不支持
-
38 DBMS_STATS.EXP
ORT_FIXED_OBJE
CTS_STATS
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 277
序号 Oracle数据库 GaussDB数据库 差异
39 DBMS_STATS.EXP
ORT_INDEX_STAT
S
DBE_STATS.EXPO
RT_INDEX_STATS
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
stattab表中,导出的
表、分区级统计信息为
numrows
numblocks
relallvisible,分别对应系
统表pg_class
pg_partition
reltuplesrelpages
relallvisible
权限:需要具有查询表的
analyze权限以及stattab
表的siud权限。
40 DBMS_STATS.EXP
ORT_PENDING_S
TATS
不支持
-
41 DBMS_STATS.EXP
ORT_SCHEMA_PR
EFS
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 278
序号 Oracle数据库 GaussDB数据库 差异
42 DBMS_STATS.EXP
ORT_SCHEMA_ST
ATS
DBE_STATS.EXPO
RT_SCHEMA_STAT
S
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
stattab表中,导出的
表、分区级统计信息为
numrows
numblocks
relallvisible,分别对应系
统表pg_class
pg_partition
reltuplesrelpages
relallvisible。导出表相关
列级统计信息与
pg_statistic表和
pg_statistic_ext表保持一
致。
权限:需要具有stattab
表的siud权限。
43
DBMS_STATS.EXP
ORT_SYSTEM_STA
TS
不支持
-
44 DBMS_STATS.EXP
ORT_TABLE_PREF
S
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 279
序号 Oracle数据库 GaussDB数据库 差异
45 DBMS_STATS.EXP
ORT_TABLE_STAT
S
DBE_STATS.EXPO
RT_TABLE_STATS
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
stattab表中,导出的
表、分区级统计信息为
numrows
numblocks
relallvisible,分别对应系
统表pg_class
pg_partition
reltuplesrelpages
relallvisible。级联导出的
列级统计信息与
pg_statistic表和
pg_statistic_ext表保持一
致。
权限:需要具有查询表的
analyze权限以及stattab
表的siud权限。
46
DBMS_STATS.FLU
SH_DATABASE_M
ONITORING_INF
O
不支持
-
47 DBMS_STATS.GAT
HER_DATABASE_S
TATS
不支持
-
48 DBMS_STATS.GAT
HER_DICTIONARY
_STATS
不支持
-
49 DBMS_STATS.GAT
HER_FIXED_OBJE
CTS_STATS
不支持
-
50 DBMS_STATS.GAT
HER_INDEX_STAT
S
不支持
-
51 DBMS_STATS.GAT
HER_PROCESSIN
G_RATE
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 280
序号 Oracle数据库 GaussDB数据库 差异
52 DBMS_STATS.GAT
HER_SCHEMA_ST
ATS
不支持
-
53 DBMS_STATS.GAT
HER_SYSTEM_STA
TS
不支持
-
54 DBMS_STATS.GAT
HER_TABLE_STAT
S
不支持
-
55 DBMS_STATS.GE
NERATE_STATS
不支持 -
56 DBMS_STATS.GET
_ADVISOR_OPR_F
ILTER
不支持
-
57 DBMS_STATS.GET
_ADVISOR_RECS
不支持 -
58 DBMS_STATS.GET
_COLUMN_STATS
不支持 -
59 DBMS_STATS.GET
_INDEX_STATS
不支持 -
60 DBMS_STATS.GET
_PARAM
不支持 -
61 DBMS_STATS.GET
_PREFS
不支持 -
62 DBMS_STATS.GET
_STATS_HISTORY_
AVAILABILITY
DBE_STATS.GET_S
TATS_HISTORY_A
VAILABILITY
GaussDB查询到的是全库存
在的最早历史统计信息的收
集时间。
63
DBMS_STATS.GET
_STATS_HISTORY_
RETENTION
DBE_STATS.GET_S
TATS_HISTORY_RE
TENTION
-
64 DBMS_STATS.GET
_SYSTEM_STATS
不支持 -
65 DBMS_STATS.GET
_TABLE_STATS
不支持 -
66 DBMS_STATS.IMP
LEMENT_ADVISO
R_TASK
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 281
序号 Oracle数据库 GaussDB数据库 差异
67 DBMS_STATS.IMP
ORT_COLUMN_ST
ATS
DBE_STATS.IMPO
RT_COLUMN_STA
TS
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
导出单列col导出的统计
信息与pg_statistic表保持
一致。多列ext-col导出的
统计信息与
pg_statistic_ext表保持一
致。
支持导入索引表达式统计
信息。要求tabname传的
是索引名称,colname
的是索引表达式名称。
权限:需要具有查询表的
analyze权限以及stattab
表的siud权限。
68
DBMS_STATS.IMP
ORT_DATABASE_
PREFS
不支持
-
69 DBMS_STATS.IMP
ORT_DATABASE_S
TATS
不支持
-
70 DBMS_STATS.IMP
ORT_DICTIONARY
_STATS
不支持
-
71 DBMS_STATS.IMP
ORT_FIXED_OBJE
CTS_STATS
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 282
序号 Oracle数据库 GaussDB数据库 差异
72 DBMS_STATS.IMP
ORT_INDEX_STAT
S
DBE_STATS.IMPO
RT_INDEX_STATS
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
stattab表中,导入的
表、分区级统计信息为
numrows
numblocks
relallvisible,分别对应系
统表pg_class
pg_partition
reltuplesrelpages
relallvisible
权限:需要具有查询表的
analyze权限以及stattab
表的siud权限。
73 DBMS_STATS.IMP
ORT_SCHEMA_PR
EFS
不支持
-
74 DBMS_STATS.IMP
ORT_SCHEMA_ST
ATS
DBE_STATS.IMPO
RT_SCHEMA_STAT
S
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
stattab表中,导入的
表、分区级统计信息为
numrows
numblocks
relallvisible,分别对应系
统表pg_class
pg_partition
reltuplesrelpages
relallvisible。导入表相关
列级统计信息与
pg_statistic表和
pg_statistic_ext表保持一
致。
权限:需要具有stattab
表的siud权限。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 283
序号 Oracle数据库 GaussDB数据库 差异
75 DBMS_STATS.IMP
ORT_SYSTEM_STA
TS
不支持
-
76 DBMS_STATS.IMP
ORT_TABLE_PREF
S
不支持
-
77 DBMS_STATS.IMP
ORT_TABLE_STAT
S
DBE_STATS.IMPO
RT_TABLE_STATS
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
stattab表中,导入的
表、分区级统计信息为
numrows
numblocks
relallvisible,分别对应系
统表pg_class
pg_partition
reltuplesrelpages
relallvisible。级联导入的
列级统计信息与
pg_statistic表和
pg_statistic_ext表保持一
致。
权限:需要具有查询表的
analyze权限以及stattab
表的siud权限。
78
DBMS_STATS.INT
ERRUPT_ADVISO
R_TASK
不支持
-
79 DBMS_STATS.LOC
K_PARTITION_STA
TS
DBE_STATS.LOCK_
PARTITION_STATS
GaussDBownname应传
schema名。
80 DBMS_STATS.LOC
K_SCHEMA_STAT
S
DBE_STATS.LOCK_
SCHEMA_STATS
GaussDBownname应传
schema名。
81 DBMS_STATS.LOC
K_TABLE_STATS
DBE_STATS.LOCK_
TABLE_STATS
GaussDBownname应传
schema名。
82 DBMS_STATS.ME
RGE_COL_USAGE
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 284
序号 Oracle数据库 GaussDB数据库 差异
83 DBMS_STATS.PRE
PARE_COLUMN_V
ALUES
不支持
-
84 DBMS_STATS.PRE
PARE_COLUMN_V
ALUES_ROWID
不支持
-
85 DBMS_STATS.PUB
LISH_PENDING_S
TATS
不支持
-
86 DBMS_STATS.PUR
GE_STATS
DBE_STATS.PURG
E_STATS
-
87 DBMS_STATS.RE
MAP_STAT_TABLE
不支持 -
88 DBMS_STATS.REP
ORT_ADVISOR_TA
SK
不支持
-
89 DBMS_STATS.REP
ORT_COL_USAGE
不支持 -
90 DBMS_STATS.REP
ORT_GATHER_AU
TO_STATS
不支持
-
91 DBMS_STATS.REP
ORT_GATHER_DA
TABASE_STATS
不支持
-
92 DBMS_STATS.REP
ORT_GATHER_DI
CTIONARY_STATS
不支持
-
93 DBMS_STATS.REP
ORT_GATHER_FIX
ED_OBJ_STATS
不支持
-
94 DBMS_STATS.REP
ORT_GATHER_SC
HEMA_STATS
不支持
-
95 DBMS_STATS.REP
ORT_STATS_OPER
ATIONS
不支持
-
96 DBMS_STATS.RES
ET_ADVISOR_TAS
K
不支持
-
97 DBMS_STATS.RES
ET_COL_USAGE
不支持 -
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 285
序号 Oracle数据库 GaussDB数据库 差异
98 DBMS_STATS.RES
ET_GLOBAL_PREF
_DEFAULTS
不支持
-
99 DBMS_STATS.RES
ET_PARAM_DEFA
ULTS
不支持
-
100 DBMS_STATS.RES
TORE_DICTIONAR
Y_STATS
不支持
-
101 DBMS_STATS.RES
TORE_FIXED_OBJ
ECTS_STATS
不支持
-
102 DBMS_STATS.RES
TORE_SCHEMA_S
TATS
DBE_STATS.RESTO
RE_SCHEMA_STAT
S
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
103 DBMS_STATS.RES
TORE_SYSTEM_ST
ATS
不支持
-
104 DBMS_STATS.RES
TORE_TABLE_STA
TS
DBE_STATS.RESTO
RE_TABLE_STATS
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
105 DBMS_STATS.RES
UME_ADVISOR_T
ASK
不支持
-
106 DBMS_STATS.SCR
IPT_ADVISOR_TAS
K
不支持
-
107 DBMS_STATS.SEE
D_COL_USAGE
不支持 -
108 DBMS_STATS.SET
_ADVISOR_TASK_
PARAMETER
不支持
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 286
序号 Oracle数据库 GaussDB数据库 差异
109 DBMS_STATS.SET
_COLUMN_STATS
DBE_STATS.SET_C
OLUMN_STATS
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
110 DBMS_STATS.SET
_DATABASE_PREF
S
不支持
-
111 DBMS_STATS.SET
_GLOBAL_PREFS
不支持 -
112 DBMS_STATS.SET
_INDEX_STATS
DBE_STATS.SET_I
NDEX_STATS
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
GaussDB中新增了
relallvisible入参。
113 DBMS_STATS.SET
_PARAM
不支持 -
114 DBMS_STATS.SET
_PROCESSING_RA
TE
不支持
-
115 DBMS_STATS.SET
_SCHEMA_PREFS
不支持 -
116 DBMS_STATS.SET
_SYSTEM_STATS
不支持 -
117 DBMS_STATS.SET
_TABLE_PREFS
不支持 -
118 DBMS_STATS.SET
_TABLE_STATS
DBE_STATS.SET_T
ABLE_STATS
GaussDBownname
schema名。
GaussDB仅支持部分入参
功能,详见《开发指南》
中“存储过程 > 高级包 >
二次封装接口(推荐) >
DBE_STATS”章节。
GaussDB中新增了
relallvisible入参。
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 287
序号 Oracle数据库 GaussDB数据库 差异
119 DBMS_STATS.SH
OW_EXTENDED_S
TATS_NAME
不支持
-
120 DBMS_STATS.TRA
NSFER_STATS
不支持 -
121 DBMS_STATS.UNL
OCK_PARTITION_
STATS
DBE_STATS.UNLO
CK_PARTITION_ST
ATS
GaussDBownname应传
schema名。
122 DBMS_STATS.UNL
OCK_SCHEMA_ST
ATS
DBE_STATS.UNLO
CK_SCHEMA_STA
TS
GaussDBownname应传
schema名。
123 DBMS_STATS.UNL
OCK_TABLE_STAT
S
DBE_STATS.UNLO
CK_TABLE_STATS
GaussDBownname应传
schema名。
124 DBMS_STATS.UPG
RADE_STAT_TABL
E
不支持
-
7-232 DBMS_XMLGEN 兼容性说明
序号
Oracle数据库 GaussDB数据库 差异
1 DBMS_XMLGEN.C
ONVERT
DBE_XMLGEN.CO
NVERT
-
2 DBMS_XMLGEN.N
EWCONTEXT
DBE_XMLGEN.NE
WCONTEXT
-
3 DBMS_XMLGEN.N
EWCONTEXTFRO
MHIERARCHY
DBE_XMLGEN.NE
WCONTEXTFROM
HIERARCHY
GaussDB生成的递归
XML最大深度不能超过
5000万层。
Oracle
newcontextfromhierarc
hy方法对于connect by
句生成的xml是带xml
的,但是对于直接构造的
数据不带xml头,
GaussDB均带xml头。
4 DBMS_XMLGEN.S
ETCONVERTSPECI
ALCHARS
DBE_XMLGEN.SET
CONVERTSPECIAL
CHARS
-
5 DBMS_XMLGEN.S
ETNULLHANDLIN
G
DBE_XMLGEN.SET
NULLHANDLING
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 288
序号 Oracle数据库 GaussDB数据库 差异
6 DBMS_XMLGEN.S
ETROWSETTAG
DBE_XMLGEN.SET
ROWSETTAG
-
7 DBMS_XMLGEN.S
ETROWTAG
DBE_XMLGEN.SET
ROWTAG
-
8 DBMS_XMLGEN.U
SENULLATTRIBUT
EINDICATOR
DBE_XMLGEN.USE
NULLATTRIBUTEI
NDICATOR
-
9 DBMS_XMLGEN.U
SEITEMTAGSFOR
COLL
DBE_XMLGEN.USE
ITEMTAGSFORCO
LL
-
10 DBMS_XMLGEN.G
ETNUMROWSPR
OCESSED
DBE_XMLGEN.GET
NUMROWSPROCE
SSED
-
11 DBMS_XMLGEN.S
ETMAXROWS
DBE_XMLGEN.SET
MAXROWS
-
12 DBMS_XMLGEN.S
ETSKIPROWS
DBE_XMLGEN.SET
SKIPROWS
-
13 DBMS_XMLGEN.R
ESTARTQUERY
DBE_XMLGEN.RES
TARTQUERY
GaussDB:调用
RESTARTQUERY方法后
对更新的数据不可见。
Oracle:调用
RESTARTQUERY方法后
对更新的数据可见。
14 DBMS_XMLGEN.G
ETXMLTYPE
DBE_XMLGEN.GET
XMLTYPE
-
15 DBMS_XMLGEN.G
ETXML
DBE_XMLGEN.GET
XML
-
16 DBMS_XMLGEN.C
LOSECONTEXT
DBE_XMLGEN.CLO
SECONTEXT
-
云数据库 GaussDB
产品介绍 7 Oracle 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 289
8 MySQL 兼容性说明
8.1 分布式
8.1.1 MySQL 数据库兼容 MySQL 模式
8.1.1.1 MySQL 数据库兼容性概述
本文档主要介绍GaussDB数据库的MySQL 5.7兼容模式(即sql_compatibility =
'MYSQL'、且设置参数b_format_version='5.7'b_format_dev_version='s1'时)与
MySQL5.7数据库的兼容性对比信息。仅介绍503.0.0版本后新增的兼容性特性,特性
的相关规格和约束建议在开发指南中查看。
GaussDB数据库在数据类型、SQL功能和数据库对象等基本功能上与MySQL数据库兼
容。
由于GaussDB数据库与MySQL数据库底层框架实现存在差异,GaussDB数据库与
MySQL数据库仍存在部分差异。
8.1.1.2 数据类型
GaussDB数据库的数据类型大部分功能场景与MySQL一致,但存在部分差异。
除特别说明,部分数据类型精度、标度、位数大小等不支持用浮点型数值定义,
建议使用合法的整型数值定义。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 290
8.1.1.2.1 数值数据类型
8-1 整数类型
序号
MySQL数据
GaussDB
据库
差异
1 BOOL 不完全兼容 MySQLBOOL/BOOLEAN类型实际映射为
TINYINT类型。
GaussDB:支持BOOL,其中:
“真”值的有效文本值是:TRUE't'
'true''y''yes''1' 'TRUE'true
'on'、以及所有非0数值。
“假”值的有效文本值是:FALSE'f'
'false''n''no''0'0'FALSE'
false'o'
使用TRUEFALSE是比较规范的用法(也是
SQL兼容的用法)。
2 BOOLEAN 不完全兼容
3 TINYINT[(M
)]
[UNSIGNED
]
支持
详细请参见说明。
4 SMALLINT[(
M)]
[UNSIGNED
]
支持
详细请参见说明。
5 MEDIUMIN
T[(M)]
[UNSIGNED
]
支持
MySQL存储MEDIUMINT数据需要3字节。
带符号的范围是-8,388,608 ~
+8,388,607
无符号的范围是0 ~ +16,777,215
GaussDB映射为INT类型,存储需要4字节。
带符号的范围是-2,147,483,648 ~
+2,147,483,647
无符号的范围是0 ~ +4,294,967,295
其他差异请参见说明。
6 INT[(M)]
[UNSIGNED
]
支持
详细请参见说明。
7 INTEGER[(M
)]
[UNSIGNED
]
支持
详细请参见说明。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 291
序号 MySQL数据
GaussDB
据库
差异
8 BIGINT[(M)
]
[UNSIGNED
]
支持
详细请参见说明。
输入格式:
MySQL
对于类似“asbd“、“12dd“、“12 12“等字符场景的输入,会采取截断或返回0
并上报WARNING处理,在严格模式插表时失败。
GaussDB
整数类型(TINYINTSMALLINTMEDIUMINTINTINTEGERBIGINT)的
输入,当非法字符串部分被截断时,如“12@3”,会直接截断并无提示信息,插
表成功。
当整数类型全部被截断(如“@123”)或字符串为空时,返回0, 且插表成功。
操作符:
+-*操作符
GaussDBINT/INTEGER/SMALLINT/BIGINT在进行运算时,返回值为类型本身,不会
向上提升类型,当返回值超范围时报错。
MySQL:支持提升类型到BIGINT后计算。
|&^~运算符
GaussDB:在类型所占用BIT位中计算;GaussDB^表示指数运算,如需使用异或运算
符,使用#替换。
MySQL:提升类型计算。
负数显示类型转换:
GaussDB:宽松模式结果为0,严格模式报错。
MySQL:依据其对应的二进制将最高位替换成数值位计算结果,例如(-1)::uint4 =
4294967295
其他差异:
INT[(M)]精度,MySQL控制格式化输出,GaussDB仅语法支持,不支持功能。
聚集函数:
varianceGaussDB表示样本方差,MySQL表示总体方差。
stddevGaussDB表示样本标准差,MySQL表示总体标准差。
显示宽度:
在为整型数字列指明宽度信息时,如果不同时指定ZEROFILL,则宽度信息在表结构描
述中不显示。
INSERT语句插入字符类型字段,GaussDB统一补齐0后插入。
JOIN USING语句,涉及类型推导,MySQL默认第一张表列,GaussDB若结果为有符号
类型则宽度信息失效,否则为第一张表字段宽度。
greatest/leastifnull/ifcase when/decodeMySQL不补齐0GaussDB在类型及宽
度信息一致时补齐0
作为函数/存储过程出入参、返回值时,MySQL支持功能、GaussDB语法不报错功能不
支持。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 292
8-2 任意精度类型
序号 MySQL数据
GaussDB
据库
差异
1 DECIMAL[(
M[,D])]
支持
操作符:GaussDB中“^”表示指数运算,
如需使用异或运算符,使用“#”替换;
MySQL中“^”表示异或。
取值范围:精度M,标度D不支持浮点型数
值输入,只支持整型数值输入。
输入格式:当字符串入参全部被截断时不
会报错,如‘@123’;只有被部分截断时
才会报错,如‘12@3’。
2 NUMERIC[(
M[,D])]
支持
3 DEC[(M[,D])
]
支持
4 FIXED[(M[,D
])]
不支持 -
8-3 浮点类型
序号 MySQL数据
GaussDB
据库
差异
1 FLOAT[(M,D
)]
支持
分区表支持:FLOAT数据类型不支持KEY
值分区策略分区表。
操作符:GaussDB中“^”表示指数运算,
如需使用异或运算符,使用“#”替换;
MySQL中“^”表示异或。
取值范围:精度M,标度D不支持浮点型数
值输入,只支持整型数值输入。
输出格式:对于非法入参一律报错
ERROR,不会在sql_mode=''的宽松模式下
WARNING
2 FLOAT(p) 支持
分区表支持:FLOAT数据类型不支持KEY
值分区策略分区表。
操作符:数值类型使用^操作符,与
MySQL不一致,GaussDB^操作符为取
指数运算。
取值范围:定义精度p时,仅支持使用合法
的整型数据类型。
输出格式:精度M,标度D不支持浮点型数
值输入,只支持整型数值输入。
对于非法入参一律报错ERROR,不会在
sql_mode=''的宽松模式下报WARNING
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 293
序号 MySQL数据
GaussDB
据库
差异
3 DOUBLE[(M
,D)]
支持
分区表支持:DOUBLE数据类型不支持KEY
键值分区策略分区表。
操作符:GaussDB中“^”表示指数运算,
如需使用异或运算符,使用“#”替换;
MySQL中“^”表示异或。
取值范围:精度M,标度D不支持浮点型数
值输入,只支持整型数值输入。
输出格式:对于非法入参一律报错
ERROR,不会在sql_mode=''的宽松模式下
WARNING
4 DOUBLE
PRECISION[(
M,D)]
支持
操作符:GaussDB中“^”表示指数运算,
如需使用异或运算符,使用“#”替换;
MySQL中“^”表示异或
取值范围:精度M,标度D不支持浮点型数
值输入,只支持整型数值输入。
输出格式:对于非法入参一律报错
ERROR,不会在sql_mode=''的宽松模式下
WARNING
5 REAL[(M,D)
]
支持
分区表支持:REAL数据类型不支持KEY
分区策略分区表。
操作符:GaussDB中“^”表示指数运算,
如需使用异或运算符,使用“#”替换;
MySQL中“^”表示异或
取值范围:精度M,标度D不支持浮点型数
值输入,只支持整型数值输入。
输出格式:对于非法入参一律报错
ERROR,不会在sql_mode=''的宽松模式下
WARNING
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 294
8-4 序列整数
序号 MySQL数据
GaussDB
据库
差异
1 SERIAL 不完全兼容 SERIAL介绍详见GaussDB 开发指南 数值类型
章节。
规格上与MySQL的差异如下:
CREATE TABLE test(f1 serial, f2 CHAR(20));
类型定义的差异,MySQLserial是映射到
BIGINT(20) UNSIGNED NOT NULL
AUTO_INCREMENT UNIQUEGaussDB
serial是映射到INTEGER NOT NULL
DEFAULT
nextval('test_f1_seq'::regclass)。如:
-- MySQL serial的定义:
mysql> SHOW CREATE TABLE test\G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`f1` bigint(20) unsigned NOT NULL
AUTO_INCREMENT,
`f2` char(20) DEFAULT NULL,
UNIQUE KEY `f1` (`f1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
-- GaussDB serial的定义
gaussdb=# \d+ test
Table "public.test"
Column | Type |
Modiers | Storage | Stats target |
Description
--------+---------------
+---------------------------------------------------
+----------+--------------+-------------
f1 | integer | not null default
nextval('test_f1_seq'::regclass) | plain | |
f2 | character(20)
| | extended
| |
Has OIDs: no
Options: orientation=row, compression=no,
storage_type=USTORE
INSERT场景下serial类型DEFAULT值的差
异。如:
-- MySQL插入serialDEFAULT
mysql> INSERT INTO test VALUES(DEFAULT, 'aaaa');
Query OK, 1 row aected (0.00 sec)
mysql> INSERT INTO test VALUES(10, 'aaaa');
Query OK, 1 row aected (0.00 sec)
mysql> INSERT INTO test VALUES(DEFAULT, 'aaaa');
Query OK, 1 row aected (0.00 sec)
mysql> SELECT * FROM test;
+----+------+
| f1 | f2 |
+----+------+
| 1 | aaaa |
| 10 | aaaa |
| 11 | aaaa |
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 295
序号 MySQL数据
GaussDB
据库
差异
+----+------+
3 rows in set (0.00 sec)
-- GaussDB插入serialDEFAULT
gaussdb=# INSERT INTO test VALUES(DEFAULT,
'aaaa');
INSERT 0 1
gaussdb=# INSERT INTO test VALUES(10, 'aaaa');
INSERT 0 1
gaussdb=# INSERT INTO test VALUES(DEFAULT,
'aaaa');
INSERT 0 1
gaussdb=# SELECT * FROM test;
f1 | f2
----+----------------------
1 | aaaa
2 | aaaa
10 | aaaa
(3 rows)
REPLACE场景下serial类型引用列的差异,
GaussDB引用列的介绍详见GaussDB 开发
指南 REPLACE语法章节。如:
-- MySQL插入serial引用列的值
mysql> REPLACE INTO test VALUES(f1, 'aaaa');
Query OK, 1 row aected (0.00 sec)
mysql> REPLACE INTO test VALUES(f1, 'bbbb');
Query OK, 1 row aected (0.00 sec)
mysql> SELECT * FROM test;
+----+------+
| f1 | f2 |
+----+------+
| 1 | aaaa |
| 2 | bbbb |
+----+------+
2 rows in set (0.00 sec)
-- GaussDB插入serial引用列的值
gaussdb=# REPLACE INTO test VALUES(f1, 'aaaa');
REPLACE 0 1
gaussdb=# REPLACE INTO test VALUES(f1, 'bbbb');
REPLACE 0 1
gaussdb=# SELECT * FROM test;
f1 | f2
----+----------------------
0 | aaaa
0 | bbbb
(2 rows)
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 296
8.1.1.2.2 日期与时间数据类型
8-5 日期与时间数据类型
MySQL数据
GaussDB
据库
差异
1 DATE 支持 GaussDB支持date数据类型,与MySQL相比
规格上存在如下差异:
输入格式
GaussDB只支持字符类型,不支持数值
类型。如支持'2020-01-01'
'20200101'字符串格式,不支持
20200101数值输入。MySQL支持数值
输入转换为date类型。
分隔符:GaussDB不支持加号“+”、
冒号“:”作为年、月、日之间的分隔
符,其他的符号都支持。MySQL所有符
号均可作为分隔符。 分隔符混合使用
的某些场景也不支持,与MySQL也有差
异,如'2020-01>01''2020/01+01'
等,不建议混合使用分隔符,建议使用
最常用的“-”、“/”作为分隔符。
无分隔符:推荐使用完整格式,如
'YYYYMMDD' 或者 'YYMMDD'。其他
不完整的格式(包括超长格式)解析的
规则与MySQL存在差异,可能报错或者
解析的结果与MySQL不一致,不推荐使
用。
输出格式
GaussDBsql_mode参数不包含
'strict_trans_tables'选项(定义为宽松模
式,否则为严格模式)时,允许年、月、
日的值是0,但是输出时会按照年、月、日
的顺序依次转换为合法的值,如date
'0000-00-10' 转换为:0002-12-10 BC
非法输入或者超过范围时,会报warning
信息,并返回0000-00-00值。MySQL对于
包含0值年、月、日的date值会原样输出。
取值范围
GaussDB的范围是4713-01-01 BC ~
5874897-12-31 AD,支持公元前的日期,
宽松模式下超过范围时,返回的是0值:
0000-00-00,严格模式下会报错。MySQL
的范围是 0000-00-00 ~ 9999-12-31,宽
松模式下超过范围后,各个场景下的表现
并不一致,可能报错(如select查询语句
中),也可能返回0000-00-00值(如
insert时)。此差异会导致date类型作为函
数入参时,函数返回的结果存在差异。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 297
MySQL数据
GaussDB
据库
差异
操作符
GaussDB仅支持date类型之间的比较操
作符“=”、“!=”、“<”、“<=”、
>”、“>=”,返回true或者false
dateinterval类型的加法运算,返回
结果为date类型;dateinterval类型
的减法运算,返回结果为date类型;
date类型之间的减法运算,返回结果为
interval类型。
MySQL date类型和其他数值类型运算
时,会先将date转换为数值类型,然后
按照数值类型运算,结果也为数值类
型。与GaussDB存在差异。如:
-- MySQL date + 数值,先将date类型转换为数值
20200101,再与1相加,结果为数值类型20200102
mysql> select date'2020-01-01' + 1;
+----------------------+
| date'2020-01-01' + 1 |
+----------------------+
| 20200102 |
+----------------------+
1 row in set (0.00 sec)
-- GaussDB date + 数值,数值类型会转换为interval
类型 1 day,然后相加得到新的日期。
gaussdb=# select date'2020-01-01' + 1;
?column?
------------
2020-01-02
(1 row)
类型转换
相比较MySQLGaussDB仅支持date类型
char(n)nchar(n)datetime
timestamp类型之间的相互转换,不支持
binarydecimaljsoninteger
unsigned integertime 类型之间的转
换。集合等场景和复杂表达式场景下公共
类型的确定原则与MySQL也不一致,参考
数据类型转换章节的描述。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 298
MySQL数据
GaussDB
据库
差异
2 DATETIME[(f
sp)]
支持 GaussDB支持datetime数据类型,与MySQL
相比规格上存在如下差异:
输入格式
GaussDB只支持字符类型,不支持数值
类型。如支持'2020-01-01
10:20:30.123456'
'20200101102030.123456'字符串格
式,不支持如
20200101102030.123456的数值类型
输入。MySQL支持数值输入转换为
datetime类型。
分隔符:GaussDB不支持加号“+”、
冒号“:”作为年、月、日之间的分隔
符,其他的符号都支持。仅支持冒号
:”作为时、分、秒之间的分隔符,其
他的符号都不支持。分隔符混合使用的
某些场景也不支持,与MySQL也有差
异,不推荐使用。MySQL支持所有符号
作为分隔符。
无分隔符:GaussDB推荐使用完整格式
'YYYYMMDDhhmiss.'。其他不完
整的格式(包括超长格式)解析的规则
可能与MySQL存在差异,可能报错或者
解析的结果与MySQL不一致,不推荐使
用。
输出格式:
统一为'YYYY-MM-DD hh:mi:ss.'
格式,格式与MySQL无差异,且不受
DateStyle参数的影响。但是对于精度
部分,如果最后几位为0GaussDB
显示,MySQL会显示。
GaussDBsql_mode参数不包含
'strict_trans_tables'选项(定义为宽松
模式,否则为严格模式)时,允许年、
月、日值是0,但是输出时会按照年、
月、日的顺序依次转换为合法的值,如
datetime '0000-00-10 00:00:00' 转换
为:0002-12-10 00:00:00 BC 非法输
入或者超过范围时,会报warning
息,并返回0000-00-00 00:00:00值。
MySQL对于包含0值年、月、日的
datetime值会原样输出。
取值范围
4713-11-24 00:00:00.000000 BC ~
294277-01-09 04:00:54.775806 AD
294277-01-09 04:00:54.775807 AD 返回
的是innity。对于超过范围的值,严格模
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 299
MySQL数据
GaussDB
据库
差异
式下GaussDB会报错,MySQL是否报错取
决于使用场景。一般查询场景不报错,而
执行DML SQL语句更改表属性的值时报
错。宽松模式下GaussDB返回0000-00-00
00:00:00值,MySQL根据使用场景可能报
错,也可能返回0000-00-00 00:00:00值或
null值。这个差异会导致以datetime
型为入参的函数执行结果与MySQL也存在
差异。
精度
范围0~6,作为表列的类型时缺省为0,与
MySQL一致。对于 datetime[(p)] 'str'
达式场景,GaussDB(p)作为精度解析,
缺省为6,将'str'按照p指定的精度格式化
datetime类型。MySQL不支持
datetime[(p)] 'str'表达式。
操作符
GaussDB仅支持datetime类型之间的比
较操作符“=”、“!=”、“<”、
<=”、“>”、“>=”,返回true
falsedatetimeinterval类型的加
法运算,返回结果为datetime类型;
datetimeinterval 类型的减法运算,
返回结果为datetime类型;datetime
型之间的减法运算,返回结果为
interval类型。
MySQL datetime类型和其他数值类型
运算时,会先将datetime转换为数值类
型,然后按照数值类型运算,结果也为
数值类型。与GaussDB存在差异。如:
-- MySQL datetime + 数值,先将datetime类型转换
为数值20201010123456,再与1相加,结果为数值类型
20201010123457
mysql> select cast('2020-10-10 12:34:56.123456' as
datetime) + 1;
+----------------------------------------------------+
| cast('2020-10-10 12:34:56.123456' as datetime) + 1
|
+----------------------------------------------------+
| 20201010123457 |
+----------------------------------------------------+
1 row in set (0.00 sec)
-- GaussDB datetime + 数值,数值类型会转换为
interval类型 1 day,然后相加得到新的datetime
gaussdb=# select cast('2020-10-10 12:34:56.123456'
as datetime) + 1;
?column?
---------------------
2020-10-11 12:34:56
(1 row)
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 300
MySQL数据
GaussDB
据库
差异
datetime类型与数值的运算结果作为函
数的入参,可能导致函数的结果与MySQL
也存在差异。
类型转换
相比较MySQLGaussDB仅支持datetime
类型与char(n)varchar(n)timestamp
类型之间的相互转换、datetimedate
time类型的转换(仅赋值和显式转换)。
不支持与binarydecimaljson
integerunsigned integer类型之间的转
换。集合等场景和复杂表达式场景下公共
类型的确定原则与MySQL也不一致,参考
数据类型转换章节的描述。
时区
GaussDB支持datetime值中携带时区信息
(时区偏移或者时区名),如'2020-01-01
12:34:56.123456 +01:00' 或者
'2020-01-01 2:34:56.123456 CST'
GaussDB会将其转换为当前服务器时区的
时间。MySQL不支持(5.7版本不支持,
8.0及之后的版本支持)。
GaussDBdatetime数据类型的表字段实
际上会被转换为timestamp(p) without
time zone类型,查询表信息或者使用工具
导出的表结构,其字段的数据类型显示的
timestamp(p) without time zone,而
不是datetimeMySQL显示的是
datetime(p)
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 301
MySQL数据
GaussDB
据库
差异
3 TIMESTAMP[
(fsp)]
支持 GaussDB支持timestamp数据类型,与
MySQL相比规格上存在如下差异:
输入格式:
只支持字符类型,不支持数值类型。如
支持'2020-01-01 10:20:30.123456'
'20200101102030.123456'字符串格
式,不支持如
20200101102030.123456的数值类型
输入。MySQL支持数值输入转换为
timestamp类型。
分隔符:不支持加号“+”、冒号“:
作为年、月、日之间的分隔符,其他的
符号都支持。仅支持冒号“:”作为时、
分、秒之间的分隔符,其他的符号都不
支持。分隔符混合使用的某些场景也不
支持,与MySQL也有差异,不推荐使
用。MySQL支持所有符号作为分隔符。
无分隔符:推荐使用完整格式
'YYYYMMDDhhmiss.'。其他不完
整的格式(包括超长格式)解析的规则
可能与MySQL存在差异,可能报错或者
解析的结果与MySQL不一致,不推荐使
用。
输出格式:
统一为'YYYY-MM-DD hh:mi:ss.'
格式,格式与MySQL无差异,且不受
DateStyle参数的影响。但是对于精度
部分,如果最后几位为0GaussDB
显示,MySQL会显示。
GaussDBsql_mode参数不包含
'strict_trans_tables'选项(定义为宽松
模式,否则为严格模式)时,允许年、
月、日值是0,但是输出时会按照年、
月、日的顺序依次转换为合法的值,如
timestamp '0000-00-10 00:00:00'
换为:0002-12-10 00:00:00 BC 非法
输入或者超过范围时,会报warning
息,并返回0000-00-00 00:00:00值。
MySQL对于包含0值年、月、日的
timestamp值会原样输出。
取值范围:
4713-11-24 00:00:00.000000 BC ~
294277-01-09 04:00:54.775806 AD
294277-01-09 04:00:54.775807 AD 返回
的是innity。对于超过范围的值,严格模
式下GaussDB会报错,MySQL是否报错取
决于使用场景。一般查询场景不报错,而
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 302
MySQL数据
GaussDB
据库
差异
执行DML SQL语句更改表属性的值时报
错。宽松模式下GaussDB返回0000-00-00
00:00:00值,MySQL根据使用场景可能报
错,也可能返回0000-00-00 00:00:00值或
null值。这个差异会导致以timestamp
型为入参的函数执行结果与MySQL也存在
差异。
精度:
范围0~6,作为表列的类型时缺省为0,与
MySQL一致。对于 timestamp[(p)] 'str'
表达式场景:
GaussDB(p)作为精度解析,缺省为
6,将'str'按照p指定的精度格式化成
timestamp类型。
MySQLtimestamp 'str'的含义与
GaussDB一致,缺省精度也为6。但是
timestamp(p) 'str'解析为函数调用,
p作为timestamp函数的入参,结果返
回一个timestamp类型的值,'str'作为
投影列的别名。
操作符:
GaussDB仅支持timestamp类型之间的
比较操作符“=”、“!=”、“<”、
<=”、“>”、“>=”,返回true
falsetimestampinterval类型的
加法运算,返回结果为timestamp
型;timestampinterval类型的减法运
算,返回结果为timestamp类型;
timestamp类型之间的减法运算,返回
结果为interval类型。
MySQL timestamp类型和其他数值类
型运算时,会先将timestamp转换为数
值类型,然后按照数值类型运算,结果
也为数值类型。与GaussDB存在差异。
如:
-- MySQL timestamp + 数值,先将timestamp类型
转换为数值20201010123456.123456,再与1相加,结果
为数值类型20201010123457.123456
mysql> select timestamp '2020-10-10
12:34:56.123456' + 1;
+--------------------------------------------+
| timestamp '2020-10-10 12:34:56.123456' + 1 |
+--------------------------------------------+
| 20201010123457.123456 |
+--------------------------------------------+
1 row in set (0.00 sec)
-- GaussDB timestamp + 数值,数值类型会转换为
interval类型 1 day,然后相加得到新的timestamp
gaussdb=# select timestamp '2020-10-10
12:34:56.123456' + 1;
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 303
MySQL数据
GaussDB
据库
差异
?column?
----------------------------
2020-10-11 12:34:56.123456
(1 row)
timestamp类型与数值的运算结果作为
函数的入参,可能导致函数的结果与
MySQL也存在差异。
类型转换:
相比较MySQLGaussDB仅支持
timestamp类型与char(n)varchar(n)
datetime类型之间的相互转换、
timestampdatetime类型的转换(仅
赋值和显式转换)。不支持与binary
decimaljsonintegerunsigned
integer类型之间的转换。集合等场景和复
杂表达式场景下公共类型的确定原则与
MySQL也不一致,参考数据类型转换章节
的描述。
时区:
GaussDB支持timestamp值中携带时区信
息(时区偏移或者时区名),如
'2020-01-01 12:34:56.123456 +01:00'
'2020-01-01 2:34:56.123456 CST'
GaussDB会将其转换为当前服务器时区的
时间。如果更改服务器时区,timestamp
类型的值输出时会转换为更改后时区的时
间戳。MySQL不支持(5.7版本不支持,
8.0及之后的版本支持)。
GaussDBtimestamp数据类型的表字段
实际上会被转换为timestamp(p) with
time zone类型,查询表信息或者使用工具
导出的表结构,其字段的数据类型显示的
timestamp(p) with time zone,而不是
timestampMySQL显示的是
timestamp(p)
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 304
MySQL数据
GaussDB
据库
差异
4 TIME[(fsp)] 支持 GaussDB支持time数据类型,与MySQL相比
规格上存在如下差异:
输入格式:
只支持字符类型,不支持数值类型。如
支持'1 10:20:30''102030'字符串格
式,不支持102030数值输入。MySQL
支持数值输入转换为time类型。
分隔符:GaussDB仅支持冒号“:”作为
时、分、秒之间的分隔符,其他的符号
都不支持。MySQL支持所有的符号作为
分隔符。
无分隔符:推荐使用完整格式,如
'hhmiss.'。其他不完整的格式(包
括超长格式)解析的规则可能与MySQL
存在差异,可能报错或者解析的结果与
MySQL不一致,不推荐使用。
分、秒、精度输入负数时,GaussDB
据库可能会忽略第一个负数开始的部
分,涉及的部分解析为0,如:
'00:00:-10' 解析结果为 '00:00:00'
可能报错,如:'00:00:-10000' 会解析
报错。取决于输入值的范围。而MySQL
数据库统一报错。
输出格式:
统一为hh:mi:ss.的格式,格式与
MySQL无差异。但是对于精度部分,如果
最后几位为0GaussDB不显示,MySQL
会显示。
取值范围:
-838:59:59.000000 ~ 838:59:59.000000
MySQL一致。对于超过范围的值,宽松
模式下GaussDB无论是查询还是insert/
updateDML操作,返回的值都是就近的
边界值:-838:59:59838:59:59MySQL
是查询时报错,DML操作返回的值才是就
近边界值,场景上存在差异。此差异会导
time类型作为函数入参时,函数返回的
结果也存在差异。
精度:
范围0~6,作为表列的类型时缺省为0,与
MySQL一致。对于 time(p) 'str' 表达式场
景,GaussDB(p)作为精度解析,缺省为
6,将'str'按照p指定的精度格式化成time
类型。MySQL是解析为time函数,p是入
参,'str'是投影列的别名。
操作符:
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 305
MySQL数据
GaussDB
据库
差异
GaussDB仅支持time类型之间的比较操
作符“=”、“!=”、“<”、“<=”、
>”、“>=”,返回true或者false
timeinterval类型的加法运算,返回
结果为time类型;timeinterval类型
的减法运算,返回结果为time类型;
time类型之间的减法运算,返回结果为
interval类型。
MySQL time类型和其他数值类型运算
时,会先将time转换为数值类型,然后
按照数值类型运算,结果也为数值类
型。与GaussDB存在差异。如:
-- MySQL time + 数值,先将time类型转换为数值
123456,再与1相加,结果为数值类型123457
mysql> select time '12:34:56' + 1;
+---------------------+
| time '12:34:56' + 1 |
+---------------------+
| 123457 |
+---------------------+
1 row in set (0.00 sec)
-- GaussDB time + 数值,数值类型会转换为interval
类型 1 day,然后相加得到新的time,由于是加了24
时,得到的仍然是12:34:56
gaussdb=# select time '12:34:56' + 1;
?column?
----------
12:34:56
(1 row)
time类型与数值的运算结果作为函数的
入参,可能导致函数的结果与MySQL也存
在差异。
类型转换:
相比较MySQLGaussDB仅支持time类型
char(n)nchar(n)类型之间的相互转
换、datetimetimestamptime类型的
转换。不支持与binarydecimaldate
jsonintegerunsigned integer类型之
间的转换。集合等场景和复杂表达式场景
下公共类型的确定原则与MySQL也不一
致,参考数据类型转换章节的描述。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 306
MySQL数据
GaussDB
据库
差异
5 YEAR[(4)] 支持 GaussDB支持year数据类型,与MySQL相比
规格上存在如下差异:
操作符:
GaussDB仅支持year类型之间的比较操
作符:=!=<<=>>=。返回
true或者false
GaussDB仅支持year类型与int4类型之
间的算术操作符:+-。返回整型值,
MySQL是返回无符号整型值。
类型转换:
相比较MySQLGaussDB仅支持year类型
int4类型的转换,仅支持int4
varcharnumericdatetime
timestamptimestamptz类型到year类型
的转换。集合等场景和复杂表达式场景下
公共类型的确定原则与MySQL也不一致,
参考数据类型转换章节的描述。
6 INTERVAL 支持 GaussDB支持INTERVAL数据类型,但
INTERVALMySQL中为表达式,同时存在以
下差异:
不支持字符串类型的日期输入作为运算,
如:select '2023-01-01' + interval 1
day
不支持interval expr unit语法中,expr
负整数或浮点数的输入,如:select
date'2023-01-01' + interval -1 day
不支持interval expr unit语法中,expr
运算表达式的输入,如:select
date'2023-01-01' + interval 4/2 day
interval表达式参与运算时,返回值固定为
datetime类型,MySQLdatetimedate
类型。运算的逻辑与原有GaussDB保持一
致,与MySQL有差异。
interval expr unit语法中,expr数值支持
的范围会根据unit单位的不同有所差异,
最大可支持的范围为[-2147483648,
2147483647]。超过范围时,严格模式报
error,宽松模式报warning并返回0值。
interval expr unit语法中,expr指定的字
段数量大于unit预期的字段数量时,在严
格模式,报error;在宽松模式,报
warning并返回0值。如unit取值为
DAY_HOUR,预期的字段数量为2expr
取值为'1-2-3',字段数量为3
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 307
8.1.1.2.3 字符串数据类型
8-6 字符串数据类型
MySQL数据
GaussDB
据库
差异
1 CHAR[(M)] 支持
输入格式
GaussDB自定义函数参数和返回值不支
持长度校验,存储过程参数不支持长度
校验,同时也不支持在
PAD_CHAR_TO_FULL_LENGTH打开时
补齐正确的空格,MySQL支持。
GaussDB不支持转义字符输入,不支持
""双引号输入,MySQL支持。
语法
GaussDB Castexpr as char)语法无
法根据输入的字符串长度转成对应的类
型,只支持转成varchar类型。不支持
cast(‘’ as char) cast(‘’ as
char(0))将空串转成char(0)类型。MySQL
支持按长度转成对应的类型。
操作符
GaussDB能正常转成浮点型的字符串与
整型值加减乘除求余,返回值是整型
值,MySQL是返回浮点型。
GaussDB除以0会报错,MySQL返回
null
~”:GaussDB返回负数,MySQL
8字节无符号整数。
^”:GaussDB表示次方幂,MySQL
表示按位异或。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 308
MySQL数据
GaussDB
据库
差异
2 VARCHAR(M
)
支持
输入格式
GaussDB的自定义函数参数和返回值不
支持长度校验,存储过程参数不支持长
度校验,MySQL支持。
GaussDB的自定义函数和存储过程中的
临时变量支持长度校验以及严格宽松模
式下的报错和截断告警,MySQL不支
持。
GaussDB不支持转义字符输入,不支持
""双引号输入,MySQL支持。
操作符
GaussDB能正常转成浮点型的字符串与
整型值加减乘除求余,返回值是整型
值,MySQL是返回浮点型。
GaussDB除以0会报错,MySQL返回
null
~”:GaussDB返回负数,MySQL
8字节无符号整数。
^”:GaussDB表示次方幂,MySQL
表示按位异或。
3
TINYTEXT 支持
输入格式
GaussDB不支持长度限制255字节(最
大不超过1G),不支持超限后,根据
严格宽松模式报错和截断告警。
MySQL支持。
GaussDB不支持转义字符输入,不支持
""双引号输入,MySQL支持。
操作符
GaussDB能正常转成浮点型的字符串与
整型值加减乘除求余,返回值是整型
值,MySQL是返回浮点型。
GaussDB除以0会报错,MySQL返回
null
~”:GaussDB返回负数,MySQL
8字节无符号整数。
^”:GaussDB表示次方幂,MySQL
表示按位异或。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 309
MySQL数据
GaussDB
据库
差异
4 TEXT 支持
输入格式
GaussDB不支持长度限制65535字节
(最大不超过1G),不支持超限后,
根据严格宽松模式报错和截断告警。
MySQL支持。
GaussDB不支持转义字符输入,不支持
""双引号输入,MySQL支持。
操作符
GaussDB能正常转成浮点型的字符串与
整型值加减乘除求余,返回值是整型
值,MySQL是返回浮点型。
GaussDB除以0会报错,MySQL返回
null
~”:GaussDB返回负数,MySQL
8字节无符号整数。
^”:GaussDB表示次方幂,MySQL
表示按位异或。
5 MEDIUMTEX
T
支持
输入格式
GaussDB不支持长度限制16777215
节(最大不超过1G),不支持超限
后,根据严格宽松模式报错和截断告
警。MySQL支持。
GaussDB不支持转义字符输入,不支持
""双引号输入,MySQL支持。
操作符
GaussDB能正常转成浮点型的字符串与
整型值加减乘除求余,返回值是整型
值,MySQL是返回浮点型。
GaussDB除以0会报错,MySQL返回
null
~”:GaussDB返回负数,MySQL
8字节无符号整数。
^”:GaussDB表示次方幂,MySQL
表示按位异或。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 310
MySQL数据
GaussDB
据库
差异
6 LONGTEXT 支持
输入格式
GaussDB只支持不超过1GMySQL
4G-1字节长度。
GaussDB不支持转义字符输入,不支持
""双引号输入,MySQL支持。
操作符
GaussDB能正常转成浮点型的字符串与
整型值加减乘除求余,返回值是整型
值,MySQL是返回浮点型。
GaussDB除以0会报错,MySQL返回
null
~”:GaussDB返回负数,MySQL
8字节无符号整数。
^”:GaussDB表示次方幂,MySQL
表示按位异或。
7 ENUM('value
1','value2',...)
不支持 -
8 SET('value1','
value2',...)
不支持 -
8.1.1.2.4 二进制数据类型
8-7 二进制数据类型
MySQL数据
GaussDB
据库
差异
1 BINARY[(M)] 不支持 -
2 VARBINARY(
M)
不支持 -
3 TINYBLOB 支持
取值范围:不支持长度限制255字节(最
大不超过1G),不支持超限后,根据严格
宽松模式报错和截断告警。
输入格式:不支持转义字符输入,不支持
""双引号输入。
操作符:不支持算数运算符“+”、
-”、“*”、“/”、“%”;不支持常
用逻辑运算符或、与、非(“||”、
&&”、“!”);不支持常用位运算符
~”、“&”、“|”、“^)
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 311
MySQL数据
GaussDB
据库
差异
4 BLOB 支持
取值范围:不支持长度限制65535字节
(最大不超过1G),不支持超限后,根据
严格宽松模式报错和截断告警。MySQL
持。
输入格式:不支持转义字符输入,不支持
""双引号输入。
操作符:不支持算数运算符“+”、
-”、“*”、“/”、“%”;不支持常
用逻辑运算符或、与、非(“||”、
&&”、“!”);不支持常用位运算符
~”、“&”、“|”、“^”。
5 MEDIUMBLO
B
支持
取值范围:不支持长度限制16777215
节(最大不超过1G),不支持超限后,根
据严格宽松模式报错和截断告警。MySQL
支持。
输入格式:不支持转义字符输入,不支持
""双引号输入。
操作符:不支持算数运算符“+”、
-”、“*”、“/”、“%”;不支持常
用逻辑运算符或、与、非(“||”、
&&”、“!”);不支持常用位运算符
~”、“&”、“|”、“^”。
6 LONGBLOB 支持
取值范围:只支持不超过1G,具体范围参
bytea数据类型集中式和分布式规格。
输入格式:不支持转义字符输入,不支持
""双引号输入。
操作符:不支持算数运算符“+”、
-”、“*”、“/”、“%”;不支持常
用逻辑运算符或、与、非(“||”、
&&”、“!”);不支持常用位运算符
~”、“&”、“|”、“^”。
7 BIT[(M)] 不支持 -
8.1.1.2.5 JSON 数据类型
8-8 JSON 数据类型
序号
MySQL数据
GaussDB数据库
1 JSON 不完全兼容
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 312
8.1.1.2.6 数据类型支持的属性
8-9 数据类型支持的属性
序号
MySQL数据库 GaussDB数据库
1 NULL 支持
2 NOT NULL 支持
3 DEFAULT 支持
4 ON UPDATE 支持
5 PRIMARY KEY 支持
6 CHARACTER SET name 支持
7 COLLATE name 支持
8.1.1.2.7 数据类型转换
不同的数据类型之间支持转换。有如下场景涉及到数据类型转换:
操作符(比较操作符、运算操作符等)的操作数的数据类型不一致。常见于查询
条件或者关联条件中的比较运算。
函数调用时实参和形参的数据类型不一致。
DML语句要更新(包括insertupdatemergereplace等)的目标列,数据的
类型和列的定义类型不一致。
显式的类型转换:cast(expr as datatype),将expr表达式类型转换为datatype
型。
集合运算(UNIONMINUSEXCEPTINTERSECT)确定最终投影列的目标数
据类型后,各个SELECT查询的投影列的类型和目标数据类型不一致。
其他表达式计算场景,根据不同表达式的数据类型, 来决定用于比较或者最终结
果的目标数据类型。
DECODE
CASE WHEN
lexpr [ NOT ] IN (expr_list)
BETWEEN AND
JOIN USING(a,b)
GREATESTLEAST
NVL COALESCE
GaussDBMySQL数据库对于数据类型转换、转换的目标数据类型有着完全不同的规
则。如下示例体现了两者处理的差异:
-- MySQL in 执行结果为0,表示false。根据规则,会将'1970-01-01'与列表中的表达式依次比较,结果都为
0,因此最终结果为0
mysql> select '1970-01-01' in ('1970-01-02', 1, '1970-01-02');
+-------------------------------------------------+
| '1970-01-01' in ('1970-01-02', 1, '1970-01-02') |
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 313
+-------------------------------------------------+
| 0 |
+-------------------------------------------------+
-- GaussDB in 执行结果为true,与MySQL结果相反:根据规则选定的公共类型为int类型,因此将左表达式
'1970-01-01'转换为int类型与列表中的表达式转换为int类型后的值依次比较。
-- '1970-01-01''1970-01-02'转换为int类型时都为1970(兼容MySQL模式下,转换时遇到非法字符后忽略,将
前面部分转换为int类型),比较结果为相等,因此返回结果为true
gaussdb=# select '1970-01-01' in ('1970-01-02', 1::int, '1970-01-02') as result;
result
--------
t
(1 row)
1. 数据类型转换规则的差异:
GaussDB数据库对于不同数据类型之间的转换规则有明确的定义:
是否支持转换:pg_cast系统表中是否定义两种类型的转换路径,没有定义则
不支持。
支持转换的场景:支持任意场景转换、仅支持显式(cast表达式)转换、仅
支持赋值时转换。不支持的场景下即使定义了转换路径,也不能做数据类型
转换。
MySQL数据库支持任意两种数据类型之间做转换。
由于存在以上差异,基于MySQL数据库的应用程序向GaussDB数据库迁移时,SQL
句可能由于不支持不同数据类型之间的转换而报错。或者支持转换的场景下,转换的
规则有差异导致SQL语句执行的结果不同。
推荐的做法是:SQL语句中尽量使用相同的数据类型做比较或者赋值等操作,避免因
为数据类型转换导致非预期结果或者性能损耗。
2. 选择目标数据类型的规则差异:
对于有些场景,比较的数据类型或者返回的数据类型需要综合考虑多个表达式的类型
才能确定。比如UNION运算中,不同SELECT语句中相同位置的投影列具有不同的数据
类型,查询结果的最终数据类型,需要由各个SELECT语句投影列的数据类型共同确
定。
确定目标数据类型的规则,GaussDB数据库和MySQL数据库存在体系上的差异。
GaussDB数据库规则:
操作符的操作数类型不一致时,并不是将操作数的类型统一转换为目标类型
再计算。而是直接注册两个数据类型的操作符,操作符处理中定义两个不同
类型的处理规则。此方式不存在类型隐式转换,但自定义的处理规则隐含了
转换的操作。
集合运算和表达式场景,确定目标数据类型的规则:
如果所有类型都相同,则此类型即为目标类型。
两个数据类型如果不同,检查数据类型是否属于同一种类的数据类型,
如数值类型、字符类型、日期时间类型等。不属于同一种类的数据类
型,无法确定目标类型,此时SQL语句执行会报错。
对于category属性(在pg_type系统表中定义)相同的数据类型,具有
preferred属性(在pg_type系统表中定义)的数据类型会被选为目标类
型。或者操作数1能转换为操作数2(没有转换路径),而操作数2无法转
换为操作数1或数值类型优先级小于操作数2,则选择操作数2作为目标类
型。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 314
如果涉及到3个及以上的数据类型,确定目标类型的规则为:
common_type(type1,type2,type3) =
common_type(common_type(type1,type2),type3),依次迭代处理,得
到最终的结果。
对于INNOT IN表达式,如果根据以上规则无法确认目标类型,会将
lexprexpr_list中每一个表达式单独按照等值操作符(=)逐个比较。
精度的确定:以最终选定的表达式的精度作为最终结果。
MySQL数据库规则:
操作符的操作数类型不一致时,先按照如下规则确定目标类型。确定后将类
型不一致的操作数转换成目标类型后再做处理。
两个参数都是string类型,则都按照string类型比较。
两个参数都是integer类型,则都按照integer类型比较。
十六进制数值如果不与数值比较,则当做二进制字符串比较。
一个参数是datetime/timestamp类型,另一个参数是常量,将常量转换
为时间戳类型然后比较。
如果其中一个参数是decimal类型,比较时使用的数据类型取决于另外一
个参数。另外一个是decimal或者integer类型时,按照decimal类型;另
外一个是其他类型,按照real类型比较。
其他场景都转换为 real 类型后比较。
集合运算和表达式场景,确定目标数据类型的规则如下:
建立任意两个类型之间的目标类型矩阵。给定两个类型,通过矩阵即可
以确定目标类型。
如果涉及到3个及以上的数据类型,确定目标类型的规则为:
common_type(type1,type2,type3) =
common_type(common_type(type1,type2),type3),依次迭代处理,得
到最终的结果。
如果目标类型是integer类型,且各个表达式类型包含有符号和无符号的
混合场景,则会将类型提升到更高精度的integer类型。符号的确定:所
有表达式都是无符号时,结果才为无符号,否则结果为有符号。
精度确定:以表达式中的最大精度作为最终结果。
从以上规则可知:GaussDBMySQL数据库在数据类型的转换规则上有很大差异,不
能直接对比。在上述场景下,SQL语句的执行结果可能和MySQL数据库不一致。当前
版本推荐各个表达式使用相同的类型,或提前使用cast转换成需要的类型来规避差
异。
8.1.1.3 系统函数
GaussDB数据库兼容绝大多数MySQL的系统函数,但存在部分差异。如未列出,函数
行为默认为GaussDB原生行为。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 315
8.1.1.3.1 流量控制函数
8-10 流量控制函数列表
MySQL
数据库
GaussD
B数据库
差异
1 IF() 支持
expr1入参仅支持bool类型。非bool类型入参若不能转
换为bool类型则报错。
expr2expr3两入参类型不同且两类型间不存在隐
式转换函数则报错。
两入参类型相同时,返回该入参类型。
expr2expr3两入参类型分别为NUMERIC
STRINGTIME其中一个时,输出为TEXT类型,
MySQL输出为VARCHAR类型。
2 IFNUL
L()
支持
expr1expr2两入参类型不同且两类型间不存在隐
式转换函数则报错。
两入参类型相同时,返回该入参类型。
expr1expr2两入参类型范畴分别为NUMEIRC
STRINGTIME其中一个时,输出为TEXT类型,
MySQL输出为VARCHAR类型。
两入参类型其中一个为FLOAT4类型另一个为numeric
范畴中任一类型,返回值为DOUBLE类型。MySQL
中一入参为FLOAT4,另一入参为TINYINT
UNSIGNED TINYINTSMALLINTUNSIGNED
SMALLINTMEDIUMINTUNSIGNED
MEDIUMINTBOOL任一类型时,返回FLOAT4
型,第一个入参为FLOAT4,第二个入参为BIGINT
UNSIGNED BIGINT时,返回FLOAT类型。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 316
MySQL
数据库
GaussD
B数据库
差异
3 NULLI
F()
支持
GaussDBNULLIF()类型推导遵从以下逻辑:
1. 如果两个参数的数据类型不同,且两入参类型存在
等值比较操作符,则返回对应等值操作符对应的左
值类型,否则会对两入参类型进行强制类型兼容。
2. 若强制类型兼容后,存在等值比较操作符,则返回
强制类型兼容后对应等值操作符的左值类型。
3. 若强制类型兼容后,仍找不到对应等值操作符,则
报错。
--两入参类型存在等值比较操作符
gaussdb=# select pg_typeof(nullif(1::int2, 2::int8));
pg_typeof
-----------
smallint
(1 row)
--两入参类型不存在等值比较操作符,但在强制类型兼容后可以找
到等值比较操作符
gaussdb=# select pg_typeof(nullif(1::int1, 2::int2));
pg_typeof
-----------
bigint
(1 row)
--两入参类型不存在等值比较操作符,且强制类型兼容后也不存在
等值比较操作符
gaussdb=# SELECT nullif(1::bit, '1'::MONEY);
ERROR: operator does not exist: bit = money
LINE 1: SELECT nullif(1::bit, '1'::MONEY);
^
HINT: No operator matches the given name and argument
type(s). You might need to add explicit type casts.
CONTEXT: referenced column: nullif
MySQL输出类型仅与第一个入参类型有关:
1. 第一个入参为tinyintsmallintmediumint
intbool时,输出为int类型。
2. 第一个入参为bigint时,输出为bigint类型。
3. 第一个入参为unsigned tinyintunsigned
smallintunsigned mediumintunsigned int
bit时,输出为unsigned int类型。
4. 第一个入参为unsigned bigint时,输出为unsigned
bigint
5. 第一个入参为浮点型即oatdoublereal时,输
出为double类型。
6. 第一个入参类型为decimalnumeric类型时,输出
decimal类型。
7. 第一个入参类型为时间类型或字符串类型即date
timedatedatetimetimestampchar
varchar以及tinytextenumset时,输出为
varchar类型。
8. 第一个入参类型为textmediumtextlongtext
时,输出为longtext类型。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 317
MySQL
数据库
GaussD
B数据库
差异
9. 第一个入参类型为tinyblob时,输出为varbinary
型。
10.第一个入参类型为mediumbloblongblob时,输
出为longblob类型。
11.第一个入参为blob时,输出为blob类型。
4
ISNUL
L()
支持 GaussDB中返回值为BOOLEAN类型的tfMySQL中返
回值为INT类型的10
8.1.1.3.2 日期和时间函数
以下为GaussDB MySQL兼容性日期时间函数公共说明。
开发指南中函数入参为时间类型表达式的情况:
时间类型表达式主要包括textdatetimedatetime,但所有可以隐式转换为时间表达式的类
型都可以作为入参,比如数字类型可以通过先隐式转化为text,再作为时间类型表达式生效。
但是生效的情况根据函数有所不同,比如:datedi由于只计算日期的差值,所以时间表达式会
当做日期来解析。timestampdi由于计算时间差值时是根据unit来决定的,所以会根据unit选择
将时间表达式当做date或者time或者datetime来解析。
函数入参为无效日期的情况:
一般而言,日期时间函数支持datedatetime的范围和mysql保持一致。date支持的范围为
'0000-01-01''9999-12-31'datetime支持的范围为'0000-01-01 00:00:00''9999-12-31
23:59:59'。虽然GaussDB支持的datedatetime范围大于mysql,但是越界仍然算无效日期。
大部分时间函数会告警并返回NULL,只有能通过cast正常转换的日期,才是正常合理的日期。
GaussDB的日期时间函数的大部分功能场景与MySQL一致,但仍有差异,一些差异如
下:
函数入参为NULL时,函数返回NULL,无warningerror告警。这些函数包括:
from_daysdate_formatstr_to_datedateditimestampdidate_add
subtimemonthtime_to_secto_daysto_secondsdayname
monthnameconvert_tzsec_to_timeaddtimeadddatedate_sub
timedilast_dayweekdayfrom_unixtimeunix_timestampsubdate
dayyearweekofyeardayofmonthdayofyearweekyearweek
dayofweektime_formathourminutesecondmicrosecondquarter
get_formatextractmakedateperiod_addtimestampaddperiod_di
utc_timeutc_timestampmaketimecurtime
示例:
gaussdb=# select day(null);
day
-----
(1 row)
纯数字入参个别函数与MySQL有差异,不带引号的数字入参统一转成text入参来
处理。
示例:
gaussdb=# select day(19231221.123141);
WARNING: Incorrect datetime value: "19231221.123141"
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 318
CONTEXT: referenced column: day
day
-----
(1 row)
时间日期运算函数:adddatesubdatedate_adddate_sub。当运算后的结果
为日期时,支持的范围为[0000-01-01, 9999-12-31];当运算后的结果为日期时
间时,支持的范围为[0000-01-01 00:00:00.000000, 9999-12-31
23:59:59.999999];当运算后的结果超过支持的范围时,在严格模式下报error
在宽松模式下报warning。另外,当运算后的日期结果在范围[0000-01-01,
0001-01-01]中时,GaussDB正常返回结果,MySQL返回'0000-00-00'
示例:
gaussdb=# select subdate('0000-01-01', interval 1 hour);
ERROR: Datetime function: datetime eld overow
CONTEXT: referenced column: subdate
gaussdb=# select subdate('0001-01-01', interval 1 day);
subdate
-------------
0000-12-31
(1 row)
对于日期和时间函数的datedatetime类型入参,含有0月或0日则为非法值,在
严格模式下报error;在宽松模式,当输入为字符串或数字时,报warning,输入
datedatetime类型时视为上一年12月或上一月最后一日处理。
对于cast函数,转换为datedatetime时,严格模式下会报error;宽松模式下不
会报warning,而是视为上一年12月或上一月最后一日处理,需要注意此区别。
MySQL对于包含0年、0月或0日的情况会原样输出。
示例:
gaussdb=# select adddate('2023-01-00', 1);-- 严格模式
ERROR: Incorrect datetime value: "2023-01-00"
CONTEXT: referenced column: adddate
gaussdb=# select adddate('2023-01-00', 1);-- 宽松模式
WARNING: Incorrect datetime value: "2023-01-00"
CONTEXT: referenced column: adddate
adddate
---------
(1 row)
gaussdb=# select adddate(date'2023-00-00', 1);-- 宽松模式
adddate
------------
2022-12-01
(1 row)
gaussdb=# select cast('2023/00/00' as date);-- 宽松模式
date
------------
2022-11-30
(1 row)
gaussdb=# select cast('0000-00-00' as datetime);-- 宽松模式
timestamp
---------------------
0000-00-00 00:00:00
(1 row)
若函数入参为numeric数据类型,在非法输入的情况下不会产生报错,会把入参当
0值处理。
示例:
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 319
gaussdb=# select from_unixtime('aa');
from_unixtime
---------------------
1970-01-01 08:00:00
(1 row)
最多保留6位小数,不保留后置都为0的小数。
示例:
gaussdb=# select from_unixtime('1234567899.00000');
from_unixtime
---------------------
2009-02-14 07:31:39
(1 row)
时间函数参数为字符串时,只保证年月日之间使用“-”分隔,时分秒之间使用
:”分隔时结果正确。
示例:
gaussdb=# select adddate('20-12-12',interval 1 day);
adddate
------------
2020-12-13
(1 row)
MySQL中,当函数的返回值为varchar时,在GaussDB中,函数对应的返回值为
text
-- GaussDB中函数的返回值。
gaussdb=# SELECT pg_typeof(adddate('2023-01-01', 1));
pg_typeof
-----------
text
(1 row)
-- MySQL中函数的返回值。
mysql> CREATE VIEW v1 AS SELECT adddate('2023-01-01', 1);
Query OK, 0 rows aected (0.00 sec)
mysql> DESC v1;
+--------------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+-------------+------+-----+---------+-------+
| adddate('2023-01-01', 1) | varchar(29) | YES | | NULL | |
+--------------------------+-------------+------+-----+---------+-------+
1 row in set (0.00 sec)
8-11 日期与和时间函数列表
MySQL数据库 GaussDB
据库
差异
1 ADDDATE() 支持 此函数的表现会因为interval表达式
的差异与MySQL有差异,具体可见
INTERVAL差异说明
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 320
MySQL数据库 GaussDB
据库
差异
2 ADDTIME() 支持
MySQL对第二入参为DATETIME
样式字符串返回NULLGaussDB
可以计算。
入参取值范围为['0001-01-01
00:00:00', 9999-12-31
23:59:59.999999]
MySQLADDTIME函数如果第一
个参数是动态参数(例如在预准
备语句中),则返回类型为
TIME。否则,函数的解析类型派
生自第一个参数的解析类型。
GaussDBADDTIME函数的返回
值规则如下:
第一个入参为date,第二个入
参为date,返回值为time
第一个入参为date,第二个入
参为text,返回值为text
第一个入参为date,第二个入
参为datetime,返回值为
time
第一个入参为date,第二个入
参为time,返回值为time
第一个入参为text,第二个入
参为date,返回值为text
第一个入参为text,第二个入
参为text,返回值为text
第一个入参为text,第二个入
参为datetime,返回值为
text
第一个入参为text,第二个入
参为time,返回值为text
第一个入参为datetime,第二
个入参为date,返回值为
datetime
第一个入参为datetime,第二
个入参为text,返回值为
text
第一个入参为datetime,第二
个入参为datetime,返回值为
datetime
第一个入参为datetime,第二
个入参为time,返回值为
datetime
第一个入参为time,第二个入
参为date,返回值为time
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 321
MySQL数据库 GaussDB
据库
差异
第一个入参为time,第二个入
参为text,返回值为text
第一个入参为time,第二个入
参为datetime,返回值为
time
第一个入参为time,第二个入
参为time,返回值为time
3 CONVERT_TZ() 支持 -
4 CURDATE() 支持 -
5 CURRENT_DATE()
CURRENT_DATE
支持 -
6 CURRENT_TIME()
CURRENT_TIME
支持 GaussDB的按精度输出的时间值(小
数点后的值)是四舍五入的;
MySQL是直接截断的。GaussDB
精度输出的时间值(小数点后的值)
末尾0都不显示;MySQL会显示。
GaussDB只支持输入[0,6]范围内的
整型值,作为返回时间的精度,其他
均报错;MySQL的精度值有效值是
[0,6],但是输入的整型值内部会对
256求余(例257,会返回精度1的时
间值)。
7 CURRENT_TIMESTAM
P()
CURRENT_TIMESTAMP
支持
GaussDB的按精度输出的时间值(小
数点后的值)是四舍五入的;
MySQL是直接截断的。GaussDB
精度输出的时间值(小数点后的值)
末尾0都不显示;MySQL会显示。
GaussDB只支持输入[0,6]范围内的
整型值,作为返回时间的精度,超过
6的整型值,会告警并按照精度6
出时间值;MySQL的精度值有效值
[0,6],但是输入的整型值内部会
256求余(例257,会返回精度1
时间值)。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 322
MySQL数据库 GaussDB
据库
差异
8 CURTIME() 支持 GaussDB此函数输入字符串或者非整
型值,会被隐式转成整型,然后再校
验精度,[0,6]范围之外的会报错,
范围之内会正常输出时间值;
MySQL直接报错。GaussDB的按精
度输出的时间值(小数点后的值)是
四舍五入的;MySQL是直接截断
的。GaussDB按精度输出的时间值
(小数点后的值)末尾0都不显示;
MySQL会显示。GaussDB只支持输
[0,6]范围内的整型值,作为返回
时间的精度,其他均报错;MySQL
的精度值有效值是[0,6],但是输入
的整型值内部会对256求余(例
257,会返回精度1的时间值)。
9 YEARWEEK() 支持 -
10 DATE_ADD() 支持 此函数的表现会因为interval表达式
的差异与MySQL有差异,具体可见
INTERVAL差异说明
11
DATE_FORMAT() 支持 -
12 DATE_SUB() 支持 此函数的表现会因为interval表达式
的差异与MySQL有差异,具体可见
INTERVAL差异说明
13
DATEDIFF() 支持 -
14 DAY() 支持 -
15 DAYNAME() 支持 -
16 DAYOFMONTH() 支持 -
17 DAYOFWEEK() 支持 -
18 DAYOFYEAR() 支持 -
19 EXTRACT() 支持 -
20 FROM_DAYS() 支持 -
21 FROM_UNIXTIME() 支持 -
22 GET_FORMAT() 支持 -
23 HOUR() 支持 -
24 LAST_DAY 支持 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 323
MySQL数据库 GaussDB
据库
差异
25 LOCALTIME()
LOCALTIME
支持 GaussDB的按精度输出的时间值(小
数点后的值)是四舍五入的;
MySQL是直接截断的。GaussDB
精度输出的时间值(小数点后的值)
末尾0都不显示;MySQL会显示。
GaussDB只支持输入[0,6]范围内的
整型值,作为返回时间的精度,其他
整型值直接报错;MySQL的精度值
有效值是[0,6],但是输入的整型值
内部会对256求余(例257,会返回
精度1的时间值)。
26 LOCALTIMESTAMP
LOCALTIMESTAMP()
支持 GaussDB的按精度输出的时间值(小
数点后的值)是四舍五入的;
MySQL是直接截断的。GaussDB
精度输出的时间值(小数点后的值)
末尾0都不显示;MySQL会显示。
GaussDB只支持输入[0,6]范围内的
整型值,作为返回时间的精度,超过
6的整型值,会告警并按照精度6
出时间值;MySQL的精度值有效值
[0,6],但是输入的整型值内部会
256求余(例257,会返回精度1
时间值)。
27 MAKEDATE() 支持 -
28 MAKETIME() 支持 MySQL相比, 入参为NULL时,
GaussDB不支持maketime函数自嵌
套,MySQL支持。
29
MICROSECOND() 支持 -
30 MINUTE() 支持 -
31 MONTH() 支持 -
32 MONTHNAME() 支持 -
33 NOW() 支持 GaussDB的按精度输出的时间值(小
数点后的值)是四舍五入的;
MySQL是直接截断的。GaussDB
精度输出的时间值(小数点后的值)
末尾0都不显示;MySQL会显示。
GaussDB只支持输入[0,6]范围内的
整型值,作为返回时间的精度,超过
6的整型值,会告警并按照精度6
出时间值;MySQL的精度值有效值
[0,6],但是输入的整型值内部会
256求余(例257,会返回精度1
时间值)。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 324
MySQL数据库 GaussDB
据库
差异
34 PERIOD_ADD() 支持 当入参period或结果小于0时,
GaussDB参考MySQL8.0.x版本的表
现,报错处理。MySQL5.7会发生整
数回绕,导致计算结果异常。
35
PERIOD_DIFF() 支持 当入参或结果小于0时,GaussDB
MySQL8.0.x版本的表现,报错处
理。MySQL5.7会发生整数回绕,导
致计算结果异常。
36
QUARTER() 支持 -
37 SEC_TO_TIME() 支持 -
38 SECOND() 支持 -
39 STR_TO_DATE() 支持 返回值与MySQL有差异,GaussDB
返回的是textMySQL返回的是
datetimedate
40
SUBDATE() 支持 此函数的表现会因为interval表达式
的差异与MySQL有差异,具体可见
INTERVAL差异说明
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 325
MySQL数据库 GaussDB
据库
差异
41 SUBTIME() 支持
MySQL对第二入参为DATETIME
样式字符串返回NULLGaussDB
可以计算
入参取值范围为['0001-01-01
00:00:00', 9999-12-31
23:59:59.999999]
MySQLSUBTIME函数如果第一
个参数是动态参数(例如在预准
备语句中),则返回类型为
TIME。否则,函数的解析类型派
生自第一个参数的解析类型。
GaussDBSUBTIME函数的返回
值规则如下:
第一个入参为date,第二个入
参为date,返回值为time
第一个入参为date,第二个入
参为text,返回值为text
第一个入参为date,第二个入
参为datetime,返回值为
time
第一个入参为date,第二个入
参为time,返回值为time
第一个入参为text,第二个入
参为date,返回值为text
第一个入参为text,第二个入
参为text,返回值为text
第一个入参为text,第二个入
参为datetime,返回值为
text
第一个入参为text,第二个入
参为time,返回值为text
第一个入参为datetime,第二
个入参为date,返回值为
datetime
第一个入参为datetime,第二
个入参为text,返回值为
text
第一个入参为datetime,第二
个入参为datetime,返回值为
datetime
第一个入参为datetime,第二
个入参为time,返回值为
datetime
第一个入参为time,第二个入
参为date,返回值为time
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 326
MySQL数据库 GaussDB
据库
差异
第一个入参为time,第二个入
参为text,返回值为text
第一个入参为time,第二个入
参为datetime,返回值为
time
第一个入参为time,第二个入
参为time,返回值为time
42 SYSDATE() 支持 MySQL入参整型值会按照一字节最
大值255整数回绕,Gauss不回绕。
43 YEAR() 支持 -
44 TIME_FORMAT() 支持 -
45 TIME_TO_SEC() 支持 -
46 TIMEDIFF() 支持 -
47 WEEKOFYEAR() 支持 -
48 TIMESTAMPADD() 支持 -
49 TIMESTAMPDIFF() 支持 -
50 TO_DAYS() 支持 -
51 TO_SECONDS() 支持 -
52 UNIX_TIMESTAMP() 支持 返回值与MySQL有差异,GaussDB
返回的是numericMySQL返回的是
int
53
UTC_DATE() 支持 MySQL支持无括号调用,GaussDB
不支持。MySQL入参整型值会按照
一字节最大值255整数回绕。
MySQL入参只支持0-6整数,
GaussDB支持可以隐式转换为0-6
输入。
54 UTC_TIME() 支持
55 UTC_TIMESTAMP() 支持
56 WEEK() 支持 -
57 WEEKDAY() 支持 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 327
8.1.1.3.3 字符串函数
8-12 字符串函数列表
序号
MySQL数据库 GaussDB
据库
差异
1 BIN() 支持 函数入参1支持类型存在差异,GaussDB
1支持类型如下:
整数类型:tinyintsmallint
mediumintintbigint
无符号整数类型:tinyint unsigned
smallint unsignedint unsigned
bigint unsigned
字符和文本类型:charvarchar
tinytexttextmediumtext
longtext,仅支持纯数字整数字符串,
且整数范围在bigint范围内。
浮点类型:oatrealdouble
定点类型:numericdecimaldec
布尔类型:bool
2 CONCAT() 支持 无论参数的数据类型如何,concat返回值的
数据类型始终为textMySQLconcat在含
有二进制类型参数时,返回值为二进制类
型。
3
CONCAT_WS() 支持 无论参数的数据类型如何,concat_ws返回
值的数据类型始终为textMySQL
concat_ws在含有二进制类型参数时,返回
值为二进制类型,其他情况返回值为字符串
类型。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 328
序号 MySQL数据库 GaussDB
据库
差异
4 ELT() 支持
函数入参1支持类型存在差异,GaussDB
入参1支持类型如下:
整数类型:tinyintsmallint
mediumintintbigint
无符号整数类型:tinyint unsigned
smallint unsignedint unsigned
字符和文本类型:charvarchar
tinytexttextmediumtext
longtext,仅支持纯数字整数字符串,
且整数范围在bigint范围内。
浮点类型:oatrealdouble
定点类型:numericdecimaldec
布尔类型:bool
函数入参2支持类型存在差异,GaussDB
入参2支持类型如下:
整数类型:tinyintsmallint
mediumintintbigint
无符号整数类型:tinyint unsigned
smallint unsignedint unsigned
bigint unsigned
字符和文本类型:charvarchar
tinytexttextmediumtextlongtext
浮点类型:oatrealdouble
定点类型:numericdecimaldec
布尔类型:bool
大对象类型:tinyblobblob
mediumbloblongblob
日期类型:datetimetimestamp
datetime
5
FIELD 支持 函数入参在bigint最大值 ~ bigint unsigned
最大值范围内的数字,存在不兼容。
函数入参为浮点型oat(m, d)double(m,
d)real(m, d)时精度更高,存在不兼容。
6
FIND_IN_SET() 支持 当数据库encoding = 'SQL_ASCII'时,不支
持默认的大小写判断规则,即在用户不指定
字符集规则的情况下,大写与小写区分判
断。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 329
序号 MySQL数据库 GaussDB
据库
差异
7 INSERT() 支持
Int64类型传参有范围限制,一旦超
-9223372036854775808~922337203
6854775807范围会直接报错,MySQL
对数值类型传参范围无限制,异常会告
警按照上限或下限数值处理。
字符串传参有限制,入参text类型字符
串长度最大为2^30-5字节,入参bytea
型字符串长度最大为2^30-512字节。
s1s2任意参数为bytea类型时,涉及到
结果出现非法字符的情况可能展示结果
MySQL有差异但是字符编码与MySQL
是一致的。
8 LOCATE() 支持 入参1bytea类型,入参2text类型时,
GaussDBMySQL行为存在差异。
9 MAKE_SET() 支持
bits参数为整型时,最大范围支持到
int128,低于MySQL范围。
bits参数为日期类型datetime
timestampdatetime,由于时间类
型转整型与MySQL存在差异,目前均未
做支持。
bit类型或bool类型由于此类数据类型
GaussMySQL存在差异,返回结果导
致的差异为GaussMySQL固有差异。
bits入参为bool类型,str入参为bit类型
bool类型均不做支持。
bits入参为字符串或文本类型时,仅支持
纯整型数字形式,其他形式存在差异。
且纯整型数字范围限制在bigint范围。
str入参整型数值超过正负819,返回
值与MySQL有差异。
str入参当以科学计数法表示时,
GaussDB末尾0值会显示,MySQL不显
示,以科学计数法打印,此为固有差
异。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 330
序号 MySQL数据库 GaussDB
据库
差异
10 QUOTE() 支持
已知str字符串中含有“\Z”,“\r”,
\%”,“\_”,GaussDB未进行转
义,与MySQL存在差异。斜线后跟部分
数字也会引起差异,如“\563”。由转
义字符引起的本函数与MySQL的差异,
此为GaussMySQL的转义字符差异。
str字符串中的“\b”,输出结果表现形
式与MySQL有差异。此为Gauss
MySQL的固有差异
str字符串中含有“\0”时,GaussDB
UTF-8字符集不识别该字符,输入不
成功。此为GaussDBMySQL的固有差
strbitbool类型时,由于Gauss
MySQL此类型目前有差异,暂不支持此
类类型。
Gauss最大支持1GB数据传输,str入参
长度最大支持536870908,函数返回结
果字符串最大支持1GB
str入参整型数值超过正负819,返回
值与MySQL有差异。
str入参当以科学计数法表示时,
GaussDB末尾0值会显示,MySQL不显
示,以科学计数法打印,此为固有差
异。
11
SPACE() 支持 1. GaussDB入参1最大支持1073741818
超出返回空字符串。MySQL的入参1
认最大支持4194304,超出告警。
2. 函数入参1支持类型存在差异,GaussDB
入参1支持类型如下:
整数类型:tinyintsmallint
mediumintintbigint
无符号整数类型:tinyint unsigned
smallint unsignedint unsigned
字符和文本类型:charvarchar
tinytexttextmediumtext
longtext,仅支持纯数字整数字符
串,且整数范围在bigint范围内。
浮点类型:oatrealdouble
定点类型:numericdecimaldec
布尔类型:bool
12 SUBSTR() 支持 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 331
序号 MySQL数据库 GaussDB
据库
差异
13 SUBSTRING() 支持 -
14 SUBSTRING_IN
DEX()
支持 -
15 STRCMP() 支持 1. 支持入参类型与M存在差异,GaussDB
支持类型如下:
字符类型:CHARVARCHAR
NVARCHAR2TEXT
二进制类型:BYTEA
数值类型:TINYING [UNSIGNED]
SMALLINT [UNSIGNED]INTEGER
[UNSIGNED]BIGINT
[UNSIGNED]FLOAT4FLOAT8
NUMERIC
日期时间类型:DATETIME
WITHOUT TIME ZONE
DATETIMETIMESTAMPTZ
2. 对于数值类型中的浮点类型,由于连接
参数设置不同,精度可能与M有差异,
不建议使用该场景,或使用NUMERIC
型代替。
16 SHA()/SHA1() 支持 -
17 SHA2() 支持 -
8.1.1.3.4 强制转换函数
8-13 强制转换函数列表
序号
MySQL数据库 GaussDB数据库 差异
1 CAST() 支持 数据类型转换规
则和支持的转换
类型均以
GaussDB支持的
转换范围和规则
为准。
2
CONVERT() 支持 数据类型转换规
则和支持的转换
类型均以
GaussDB支持的
转换范围和规则
为准。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 332
8.1.1.3.5 加密函数
8-14 加密函数列表
序号
MySQL数据库 GaussDB数据库 差异
1 AES_DECRYPT() 支持 -
2 AES_ENCRYPT() 支持 -
8.1.1.3.6 JSON 函数
json函数差异说明:
1. 对于json函数和其他字符入参函数来说,如果含有转义字符的输入,默认情况下会与MySQL
有一定差异,需要设置GUC参数set standard_conforming_strings= o;的情况下,对于转义
字符的场景才会与MySQL兼容,但是会产生非标准字符输入的warning告警,在转义字符中
\t\u与转义数字与MySQL有差异。JSON_UNQUOTE()函数该场景下已做兼容,不设置
GUC参数时,仍与MySQL兼容,且不会报警。
2. 在处理超长数字(数字的字符长度超过64)时,GaussDBjson函数会将数字解析为一个
double处理,并使用科学计数法计数。和MySQL的非json类型入参相同。但是在json类型入
参时,由于json类型未完全与MySQL兼容,此场景下会产生差异。MySQL会完整显示数字
(并且当数字长度超过82时,MySQL会给出错误的结果。),GaussDB依然将超长数字解析
为一个double精度的值。考虑到超长数字内部都是使用浮点数进行储存,进行运算时无论
GaussDB还是MySQL都会有精度丢失,建议您使用字符串来储存超长数字。
gaussdb=# select json_insert('[1, 4,
99999999999999999999999999999999999999999999999999999999999999999999999999]','$[6]',j
son_insert('[1,4]','$[5]',99999999999999999999999999999999999999999999999999999999999999
999999999999));
json_insert
------------------------------
[1, 4, 1e+74, [1, 4, 1e+74]]
(1 row)
8-15 JSON 函数列表
MySQL数据库 GaussDB数据库 差异
1 JSON_APPEND() 支持 -
2 JSON_ARRAY() 支持 -
3 JSON_ARRAY_APPEND() 支持 -
4 JSON_ARRAY_INSERT() 支持 -
5 JSON_CONTAINS() 支持 -
6 JSON_CONTAINS_PATH() 支持 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 333
MySQL数据库 GaussDB数据库 差异
7 JSON_DEPTH() 支持 返回值与
MySQL有差
异,GaussDB
返回的是int
MySQL返回的
bigint
8
JSON_EXTRACT() 支持 -
9 JSON_INSERT() 支持 -
10 JSON_KEYS() 支持 -
11 JSON_LENGTH() 支持 返回值与
MySQL有差
异,GaussDB
返回的是int
MySQL返回的
bigint
12
JSON_MERGE() 支持 -
13 JSON_OBJECT() 支持 -
14 JSON_QUOTE() 支持 返回值与
MySQL有差
异,GaussDB
返回的是
jsonMySQL
返回的是
varchar或者
text
15 JSON_REMOVE() 支持 -
16 JSON_REPLACE() 支持 -
17 JSON_SEARCH() 支持 返回值与
MySQL有差
异,GaussDB
返回的是
textMySQL
返回的是
json
18 JSON_SET() 支持 -
19 JSON_TYPE() 支持 数值类型的
json值统一识
别为
number,与
MySQL有差
异。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 334
MySQL数据库 GaussDB数据库 差异
20 JSON_UNQUOTE() 支持 -
21 JSON_VALID() 支持 -
8.1.1.3.7 聚合函数
8-16 聚合函数列表
MySQL数据库 GaussDB数据库 差异
1 GROUP_CONCAT() 支持 1. group_concat参数中同时有
DISTINCTORDER BY语法
时,所有ORDER BY后的表达式
必须也在DISTINCT的表达式之
中。
2. group_concat(... order by
字)不代表按照第几个参数的
顺序,数字只是一个常量表达
式,相当于不排序。
3. 无论参数的数据类型如何,
group_concat返回值的数据类
型始终为textMySQL
group_concat在含有二进制类
型参数时,返回值为二进制类
型,其他情况返回值为字符串
类型,并且返回值长度大于512
时,其数据类型为字符串大对
象或二进制大对象。
4. GUC参数
group_concat_max_len有效范
围是0-1073741823,最大值比
MySQL小。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 335
MySQL数据库 GaussDB数据库 差异
2 DEFAULT() 支持 1. 字段默认值为数组形式,
GaussDB返回数组形式,
MySQL不支持数组类型。
2. GaussDB字段是隐藏列(比如
xmincmin),函数返回空
值。
3. GaussDB支持分区表、临时
表、多表连接查询默认值。
4. GaussDB支持查询列名包含字
符串值节点(表示名称)和
A_Star节点(表示出现
*”),如default(tt.t4.id)
default(tt.t4.*)。不合法的查询
列名和A_Star节点,GaussDB
MySQL报错信息有差异。
5. GaussDB创建字段默认值,没
有检验字段类型的范围,使用
default函数可能报错。
6. 字段的默认值是函数表达式
时,GaussDBdefault函数返
回建表时字段的default表达式
的计算值。MySQLdefault
数返回NULL
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 336
8.1.1.3.8 数字操作函数
8-17 数字操作函数列表
序号
MySQ
L数据
Gauss
DB数据
差异
1 log2() 支持 1. 小数位显示与MySQL存在差异,受GaussDB浮点数据
类型限制,可通过参数extra_oat_digits控制小数位
个数显示。
2. 由于输入精度内部处理差异,GaussDBMySQL会存
在结果计算差异。
3. 支持数据类型有:
bigintint16intsmallint tinyint整数类
型。
bigint unsignedinteger unsignedsmallint
unsignedtinyint unsigned无符号整数类型。
numericreal浮点数类型。
charactercharacter varyingclobtext字符串
类型,仅支持纯数字整数字符串。
set类型。
NULL空类型。
2 log10(
)
支持 1. 小数位显示与MySQL存在差异,受GaussDB浮点数据
类型限制,可通过参数extra_oat_digits控制小数位
个数显示;
2. 由于输入精度内部处理差异,GaussDBMySQL会存
在结果计算差异;
3. 支持数据类型有:
bigintint16intsmallint tinyint整数类
型。
bigint unsignedinteger unsignedsmallint
unsignedtinyint unsigned无符号整数类型。
numericreal浮点数类型。
charactercharacter varyingclobtext字符串
类型,仅支持纯数字整数字符串。
set类型。
NULL空类型。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 337
8.1.1.3.9 其他函数
8-18 其他函数列表
序号
MySQL数据库 GaussDB数据库 差异
1 UUID() 支持 -
2 UUID_SHORT() 支持 -
8.1.1.4 操作符
GaussDB数据库兼容绝大多数MySQL的操作符,但存在部分差异。如未列出,操作符
行为默认为GaussDB原生行为。
序号 MySQL数据库 GaussDB数据库 差异
1 安全等于(<=> 支持 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 338
序号 MySQL数据库 GaussDB数据库 差异
2 [NOT] REGEXP 支持
当开启
b_format_dev_version='s2'
时,模式字符串pattern 中有'\
\a', '\\d', '\\e', '\\n', '\\Z', '\\u'
等转义字符时,匹配源字符串
'\a', '\d', '\e', '\n', '\Z', '\u'时,
GaussDB行为与MySQL5.7
一致。MySQL5.7存在bug
MySQL后续版本已经修复与
GaussDB一致。
当开启
b_format_dev_version='s2'
时,GaussDB '\b' 可以与'\\b'
匹配,MySQL匹配失败。
模式字符串pat非法入参,只
存在右单括号’)’时,
GaussDB数据库报错。MySQL
存在bug,后续版本已经修复
此问题。
de|abc 匹配序列deabc
匹配规则,当|左右存在空值
时,MySQL存在bug,会报
错,后续版本已经修复此问
题。
空白字符[\t]正则匹配字符类
[:blank:]GaussDB可匹配,
兼容MySQL\t不能匹配
[:blank:]MySQL存在bug
后续版本已经修复此问题。
GaussDB支持非贪婪模式匹
配,即尽可能少的匹配字符,
在部分特殊字符后加‘?’问
号字符,例如:“??, *?, +?,
{n}?, {n,}?, {n,m}?”。MySQL
5.7版本不支持非贪婪模式匹
配,并报错:Got error
'repetition-operator operand
invalid' from regexpMySQL
8.0版本已经支持。
binary字符集下,text
型、blob类型均会转换成
bytea类型,由于REGEXP操作
符不支持bytea类型,因此无
法匹配。
3
[NOT] RLIKE 支持 [NOT] REGEXP
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 339
8.1.1.5 字符集
GaussDB数据库支持指定数据库、模式、表或列的字符集,支持的范围如下。
8-19 字符集列表
序号
MySQL数据库 GaussDB数据库
1 utf8mb4 支持
2 gbk 支持
3 gb18030 支持
8.1.1.6 排序规则
GaussDB数据库支持指定模式、表或列的排序规则,支持的范围如下。
排序规则差异说明:
当前仅有字符串类型、部分二进制类型支持指定排序规则,其他类型不支持指定排序规则,
可以通过查询pg_type系统表中类型的typcollation属性不为0来判断该类型支持字符序。
MySQL中所有类型可以指定字符序,但除字符串、二进制类型其他排序规则无实际意义。
当前排序规则仅支持在其对应字符集与库级字符集一致时可以指定。
utf8mb4字符集下默认字符序为utf8mb4_general_ci,与MySQL5.7保持一致,
utf8mb4_0900_ai_ciutf8mb4的非默认字符序。
GaussDButf8utf8mb4为同一个字符集。
8-20 排序规则列表
序号
MySQL数据库 GaussDB数据库
1 utf8mb4_general_ci 支持
2 utf8mb4_unicode_ci 支持
3 utf8mb4_bin 支持
4 gbk_chinese_ci 支持
5 gbk_bin 支持
6 gb18030_chinese_ci 支持
7 gb18030_bin 支持
8 binary 支持
9 utf8mb4_0900_ai_ci 支持
10 utf8_general_ci 支持
11 utf8_bin 支持
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 340
8.1.1.7 SQL
GaussDB数据库兼容绝大多数MySQL语法,但存在部分差异。本章节介绍GaussDB
据库当前支持的MySQL语法。
8.1.1.7.1 DDL
概述 详细语法说明 差异
1 建表和修改表时支持
创建主键、UNIQUE
索引
ALTER TABLE
CREATE TABLE
GaussDB当前不支持UNIQUE
INDEX|KEY index_name
法,使用UNIQUE INDEX|KEY
index_name语法时会报错。
MySQL支持。
当约束被建立为全局二级索
引,SQL语句中指定using
btree时,底层会建立为
ubtree
当约束关联的表为ustore,且
SQL语句中指定为using btree
时,底层会建立为ubtree
2 支持前缀索引 CREATE INDEX
前缀长度不得超过2676,键值
的实际长度受内部页面限制,
若字段中含有多字节字符或者
一个索引上有多个键,索引行
长度可能会超限报错。
CREATE INDEX语法中,不支
持以下关键字作为前缀键的字
段名称:COALESCE
EXTRACTGREATEST
LEASTLNNVLNULLIF
NVLNVL2OVERLAY
POSITIONREGEXP_LIKE
SUBSTRING
TIMESTAMPDIFFTREAT
TRIMXMLCONCAT
XMLELEMENTXMLEXISTS
XMLFORESTXMLPARSE
XMLPIXMLROOT
XMLSERIALIZE
主键和唯一键索引中不支持前
缀键。
3
支持指定字符集与排
序规则
ALTER SCHEMA
ALTER TABLE
CREATE
SCHEMA
CREATE TABLE
-
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 341
概述 详细语法说明 差异
4 创建分区表语法兼容 CREATE TABLE
PARTITION
CREATE TABLE
SUBPARTITION
-
5 建表和修改表时支持
指定表级和列级
comment
CREATE TABLE
ALTER TABLE
-
6 创建索引时支持指定
索引级comment
CREATE INDEX -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 342
概述 详细语法说明 差异
7 交换普通表和分区表
分区的数据
ALTER TABLE
PARTITION
ALTER TABLE EXCHANGE
PARTITION的差异点:
MySQL表或分区使用
tablespace时,则无法进行分
区和普通表数据的交换;
GaussDB表或分区使用不同的
tablespace时,仍可进行分区
和普通表数据的交换。
对于列默认值,MySQL不会校
验默认值,因此默认值不同时
也可进行分区和普通表数据的
交换;GaussDB会校验默认
值,如果默认值不同,则无法
进行分区和普通表数据的交
换。
MySQL在分区表或普通表上进
DROP列操作后,表结构仍
然一致,则可进行分区和普通
表数据的交换;GaussDB需要
保证普通表和分区表的被删除
列严格对齐才能进行分区和普
通表数据的交换。
MySQLGaussDB的哈希算法
不同,所以两者在相同的hash
分区存储的数据可能不一致,
导致最后交换的数据也可能不
一致。
MySQL的分区表不支持外键,
普通表包含外键或其他表引用
普通表的外键,则无法进行分
区和普通表数据的交换;
GaussDB的分区表支持外键,
在两个表的外键约束一致时,
则可进行分区和普通表数据的
交换;GaussDB的分区表不带
外键,普通表有其他表引用,
如果分区表和普通表表一致,
则可进行分区和普通表数据的
交换。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 343
概述 详细语法说明 差异
8 支持自增列 ALTER TABLE
CREATE TABLE
目前仅支持各个DN独立自增的
本地自动增长列。
自动增长列建议为索引(非全
局二级索引)的第一个字段,
否则建表时产生警告,含有自
动增长列的表进行某些操作时
会产生错误,例如:ALTERT
TABLE EXCHANGE
PARTITIONMySQL自动增长
列必须为索引第一个字段。
AUTO_INCREMENT = value
法,value必须为小于2^127
正数。MySQL不校验value
当自增值已经达到字段数据类
型的最大值时,继续自增将产
生错误。MySQL有些场景产生
错误或警告,有些场景仍自增
为最大值。
不支持
innodb_autoinc_lock_mode
统变量,GaussDBGUC参数
auto_increment_cache=0时,
批量插入自动增长列的行为与
MySQL系统变量
innodb_autoinc_lock_mode=1
相似。
自动增长列在导入数据或者进
Batch Insert执行计划的插入
操作时,对于混合0NULL
确定值的场景,如果产生错
误,后续插入自增值不一定与
MySQL完全一致。
提供auto_increment_cache
参数,可以控制预留自增值
的数量。
批量插入在不同执行计划下,
自增的顺序、自增值预留数量
可能与MySQL不完全相同。例
如:“INSERT INTO table
VALUES(...),(...),...”由于要分
布到不同DN,在某些执行计划
中,DN获取不到即将插入的行
数。
提供auto_increment_cache
参数,可以控制预留自增值
的数量。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 344
概述 详细语法说明 差异
并行导入或插入自动增长列触
发自增时,每个并行线程预留
的缓存值也只在其线程中使
用,未完全使用完毕的话,也
会出现表中自动增长列的值不
连续的情况。并行插入产生的
自增值结果无法保证与MySQL
完全一致。
SERIAL数据类型为原有的自增
列,与AUTO_INCREMENT
增列有差异。MySQLSERIAL
数据类型就是
AUTO_INCREMENT自增列。
不允许auto_increment_oset
的值大于
auto_increment_increment
值,会产生错误。MySQL
许,并说明
auto_increment_oset会被忽
略。
在表有主键或索引的情况下,
ALTER TABLE命令重写表数据
的顺序与MySQL不一定相同,
GaussDB按表数据存储顺序重
写,MySQL会按主键或索引顺
序重写,导致自增值的顺序可
能不同。
ALTER TABLE命令添加或修改
自增列时,第一次预留自增值
的数量是表统计信息中的行
数,统计信息的行数不一定与
MySQL一致。
在触发器或用户自定义函数中
自增时,刷新last_insert_id
回值。MySQL不刷新。
GUC参数
auto_increment_oset
auto_increment_increment
置超出范围的值会产生错误。
MySQL会自动改为边界值。
暂不支持last_insert_id函数。
本地临时表暂不支持自动增长
列。
9
支持删除表的主键约
ALTER TABLE -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 345
概述 详细语法说明 差异
1
0
支持CREATE
TABLE ... LIKE语法兼
CREATE TABLE ...
LIKE
MySQL 8.0.16 之前的版本
中,CHECK约束会被语法解析
但功能会被忽略,表现为不复
CHECK约束,GaussDB支持
复制CHECK约束。
对于set数据类型,在建表时,
MySQL支持复制,GaussDB
支持复制。
对于主键约束名称,在建表
时,MySQL所有主键约束名称
固定为PRIMARY KEY
GaussDB不支持复制。
对于唯一键约束名称,在建表
时,MySQL支持复制,
GaussDB不支持复制。
对于CHECK约束名称,在建表
时,MySQL 8.0.16 之前的版本
CHECK约束信息,GaussDB
支持复制。
对于索引名称,在建表时,
MySQL支持复制,GaussDB
支持复制。
在跨sql_mode模式建表时,
MySQL受宽松模式和严格模式
控制,GaussDB可能存在严格
模式失效的情况。
例如:源表存在默认值
0000-00-00”,在
no_zero_date”严格模式
下,GaussDB建表成功,且包
含默认值“0000-00-00”,严
格模式失效;而MySQL建表失
败,受严格模式控制。
针对跨数据库创建表,MySQL
支持,GaussDB不支持。
针对源表为临时表,创建非临
时表,MySQL支持,GaussDB
不支持。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 346
概述 详细语法说明 差异
1
1
支持更改表名兼容语
ALTER TABLE[ IF
EXISTS ] tbl_name
RENAME [TO | AS
| =]
new_tbl_name;
RENAME {TABLE |
TABLES} tbl_name
TO new_tbl_name
[, tbl_name2 TO
new_tbl_name2, ...
];
GaussDBalter rename语法
仅支持修改表名称功能操作,
不能耦合其它功能操作;
GaussDB的仅旧表名字段支持
schema.table_name用法;
且新表名与旧表名将属于同一
schema下;
GaussDB的不支持新旧表跨
shema重命名操作;但如有权
限,则可在当前schema下修改
其它schema下表名称;
GaussDBrename多组表的语
法支持全为本地临时表的重命
名,不支持本地临时表和非本
地临时表组合的场景。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 347
概述 详细语法说明 差异
1
2
支持增加子分区语法
兼容
ALTER TABLE [ IF
EXISTS ]
{ table_name [*] |
ONLY table_name
| ONLY
( table_name )}
action [, ... ];
action:
move_clause |
exchange_clause |
row_clause |
merge_clause |
modify_clause |
split_clause |
add_clause |
drop_clause |
ilm_clause
add_clause:
ADD
{{partition_less_th
an_item |
partition_start_en
d_item |
partition_list_item
} |
PARTITION({partit
ion_less_than_ite
m |
partition_start_en
d_item |
partition_list_item
})}
不支持ALTER TABLE
table_name ADD PARTITION
(partition_denition1,
partition_denition1,);语法
添加多分区。
仅支持原有添加多分区语法:
ALTER TABLE table_name
ADD PARTITION
(partition_denition1), ADD
PARTITION
(partition_denition2[y1] ),
;
8.1.1.7.2 DML
序号
概述 详细语法说
差异
1 DELETE支持ORDER BY
LIMIT
DELETE -
2 UPDATE支持ORDER BY
LIMIT
UPDATE -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 348
序号 概述 详细语法说
差异
3 REPLACE INTO语法兼容 REPLACE
时间类型初始值的差异。例如:
MySQL不受严格模式和宽松
模式的影响,可向表中插入
时间0值,即:
mysql> CREATE TABLE test(f1
TIMESTAMP NOT NULL, f2
DATETIME NOT NULL, f3 DATE
NOT NULL);
Query OK, 1 row aected (0.00 sec)
mysql> REPLACE INTO test
VALUES(f1, f2, f3);
Query OK, 1 row aected (0.00 sec)
mysql> SELECT * FROM test;
+---------------------
+---------------------+------------+
| f1 | f2 |
f3 |
+---------------------
+---------------------+------------+
| 0000-00-00 00:00:00 | 0000-00-00
00:00:00 | 0000-00-00 |
+---------------------
+---------------------+------------+
1 row in set (0.00 sec)
GaussDB在宽松模式下才可
以成功插入时间0值,即
gaussdb=# SET b_format_version =
'5.7';
SET
gaussdb=# SET
b_format_dev_version = 's1';
SET
gaussdb=# SET sql_mode = '';
SET
gaussdb=# CREATE TABLE test(f1
TIMESTAMP NOT NULL, f2
DATETIME NOT NULL, f3 DATE
NOT NULL) DISTRIBUTE BY
HASH(f1);
CREATE TABLE
gaussdb=# REPLACE INTO test
VALUES(f1, f2, f3);
REPLACE 0 1
gaussdb=# SELECT * FROM test;
f1 | f2 | f3
---------------------
+---------------------+------------
0000-00-00 00:00:00 | 0000-00-00
00:00:00 | 0000-00-00
(1 row)
在严格模式下,则报错date/
time eld value out of
range: "0000-00-00
00:00:00"
BIT类型在有NOT NULL时初始
值的差异。例如:
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 349
序号 概述 详细语法说
差异
MySQL BIT类型的初始值为
空串'',即:
mysql> CREATE TABLE test(f1
BIT(3) NOT NULL);
Query OK, 0 rows aected (0.01
sec)
mysql> REPLACE INTO test
VALUES(f1);
Query OK, 1 row aected (0.00 sec)
mysql> SELECT f1, f1 IS NULL
FROM test;
+----+------------+
| f1 | f1 is null |
+----+------------+
| | 0 |
| | 0 |
+----+------------+
2 rows in set (0.00 sec)
GaussDB BIT类型的初始值
NULL,则报错。
gaussdb=# CREATE TABLE test(f1
int, f2 BIT(3) NOT NULL)
DISTRIBUTE BY HASH(f1);
CREATE TABLE
gaussdb=# REPLACE INTO test
VALUES(1, f2);
ERROR: null value in column "f2"
violates not-null constraint
DETAIL: Failing row contains (1,
null).
4
SELECT支持指定多分区
查询
SELECT -
5 UPDATE支持指定多分区
更新
UPDATE -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 350
序号 概述 详细语法说
差异
6 LOAD DATA导入数据功
LOAD
DATA
LOAD DATA语法执行结果与
MySQL严格模式一致,宽松模
式暂未适配。
IGNORELOCAL参数功能仅为
当导入数据与表中数据存在冲
突时,忽略当前冲突行数据功
能和当文件中字段数小于指定
表中列数时自动为其余列填充
默认值功能,其余功能暂未适
配。
指定LOCAL关键字,且文件路
径为相对路径时,文件从二进
制目录下搜索;不指定LOCAL
关键字,且文件路径为相对路
径时,文件从数据目录下搜
索。
语法中指定分隔符,转义字
符,分行符等符号时,若指定
为单引号,将导致词法解析错
误。
[(col_name_or_user_var [,
col_name_or_user_var] ...)]
定列参数不支持重复指定列。
[FIELDS TERMINATED BY
'string']指定换行符不能与
[LINES TERMINATED BY
'string']分隔符相同。
执行LOAD DATA语法写入表中
的数据若无法转换为表中数据
类型格式时报错。
指定列时,仅支持指定为列
名,不支持指定为用户变量。
LOAD DATA SET表达式中不支
持指定列名计算。
set表达式返回值类型与对应
列类型之间不存在隐式转换函
数则报错。
LOAD DATA不支持INSERT
DELETE触发器。
LOAD DATA只能用于表,不能
用于视图。
Windows下的文件与Linux环境
下文件默认换行符存在差异,
LOAD DATA无法识别此场景会
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 351
序号 概述 详细语法说
差异
报错,建议用户导入时检查导
入文件行结尾的换行符。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 352
序号 概述 详细语法说
差异
7 INSERT IGNORE兼容 INSERT
IGNORE
GaussDB会返回降级后的错误
信息,MySQL则会将降级后的
错误信息记录到错误堆栈中,
然后调用show warnings;命令
查看。
时间类型的差异。例如:
GaussDBdate
datetimetimestamp默认
零值。
gaussdb=# CREATE TABLE test(f1
DATE NOT NULL, f2 DATETIME
NOT NULL, f3 TIMESTAMP NOT
NULL);
CREATE TABLE
gaussdb=# INSERT IGNORE INTO
test VALUES(NULL, NULL, NULL);
WARNING: null value in column
"f1" violates not-null constraint
DETAIL: Failing row contains (null,
null, null, null).
WARNING: null value in column
"f2" violates not-null constraint
DETAIL: Failing row contains (null,
null, null, null).
WARNING: null value in column
"f3" violates not-null constraint
DETAIL: Failing row contains (null,
null, null, null).
INSERT 0 1
gaussdb=#
SELECT * FROM test;
f1 | f2 |
f3
------------+---------------------
+---------------------
1970-01-01 | 1970-01-01 00:00:00
| 1970-01-01 00:00:00
(1 row)
MySQLdatedatetime
timestamp默认零值。
mysql> CREATE TABLE test(f1
DATE NOT NULL, f2 DATETIME
NOT NULL, f3 TIMESTAMP NOT
NULL);
Query OK, 0 rows aected (0.00
sec)
mysql> INSERT IGNORE INTO test
VALUES(NULL, NULL, NULL);
Query OK, 1 row aected, 3
warnings (0.00 sec)
mysql> show warnings;
+---------+------
+----------------------------+
| Level | Code |
Message |
+---------+------
+----------------------------+
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 353
序号 概述 详细语法说
差异
| Warning | 1048 | Column 'f1'
cannot be null |
| Warning | 1048 | Column 'f2'
cannot be null |
| Warning | 1048 | Column 'f3'
cannot be null |
+---------+------
+----------------------------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM test;
+------------+---------------------
+---------------------+
| f1 | f2 |
f3 |
+------------+---------------------
+---------------------+
| 0000-00-00 | 0000-00-00 00:00:00
| 0000-00-00 00:00:00 |
+------------+---------------------
+---------------------+
1 row in set (0.00 sec)
由于GaussDB不支持MySQL
bit类型,因此忽略bit类型NOT
NULL约束和插入的bit类型长度
与定义不同的场景下不支持
INSERT IGNORE错误降级。
GaussDBbit类型
gaussdb=# CREATE TABLE test(f1
BIT(10) NOT NULL);
CREATE TABLE
gaussdb=# INSERT IGNORE INTO
test VALUES(NULL);
ERROR: Un-support feature
DETAIL: ignore null for insert
statement is not supported in
column f1.
gaussdb=# INSERT IGNORE INTO
test VALUES('1010');
ERROR: bit string length 4 does
not match type bit(10)
CONTEXT: referenced column: f1
MySQLbit类型
mysql> CREATE TABLE test(f1
BIT(10) NOT NULL);
Query OK, 0 rows aected (0.00
sec)
mysql> INSERT IGNORE INTO test
VALUES(NULL);
Query OK, 1 row aected, 1
warning (0.00 sec)
mysql> INSERT IGNORE INTO test
VALUES('1010');
Query OK, 1 row aected, 1
warning (0.01 sec)
MySQL数据库时间类型指定精
度时,插入时间零值会显示精
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 354
序号 概述 详细语法说
差异
度,GaussDB则不显示,例
如:
GaussDB指定时间精度
gaussdb=# CREATE TABLE test(f1
TIME(3) NOT NULL, f2
DATETIME(3) NOT NULL, f3
TIMESTAMP(3) NOT NULL);
CREATE TABLE
gaussdb=# INSERT IGNORE INTO
test VALUES(NULL,NULL,NULL);
WARNING: null value in column
"f1" violates not-null constraint
DETAIL: Failing row contains (null,
null, null).
WARNING: null value in column
"f2" violates not-null constraint
DETAIL: Failing row contains (null,
null, null).
WARNING: null value in column
"f3" violates not-null constraint
DETAIL: Failing row contains (null,
null, null).
INSERT 0 1
gaussdb=# SELECT * FROM test;
f1 | f2 | f3
----------+---------------------
+---------------------
00:00:00 | 1970-01-01 00:00:00 |
1970-01-01 00:00:00
(1 row)
MySQL指定时间精度
mysql> CREATE TABLE test(f1
TIME(3) NOT NULL, f2
DATETIME(3) NOT NULL, f3
TIMESTAMP(3) NOT NULL);
Query OK, 0 rows aected (0.00
sec)
mysql> INSERT IGNORE INTO test
VALUES(NULL,NULL,NULL);
Query OK, 1 row aected, 3
warnings (0.00 sec)
mysql> SELECT * FROM test;
+--------------
+-------------------------
+-------------------------+
| f1 | f2 |
f3 |
+--------------
+-------------------------
+-------------------------+
| 00:00:00.000 | 0000-00-00
00:00:00.000 | 0000-00-00
00:00:00.000 |
+--------------
+-------------------------
+-------------------------+
1 row in set (0.00 sec)
由于MySQL数据库和GaussDB
执行过程的差异,因此,产生
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 355
序号 概述 详细语法说
差异
warnings条数可能不同,例
如:
GaussDB产生的warnings
gaussdb=# CREATE TABLE test(f1
INT, f2 INT not null);
CREATE TABLE
gaussdb=# INSERT INTO test
VALUES(1,0),(3,0),(5,0);
INSERT 0 3
gaussdb=# INSERT IGNORE INTO
test SELECT f1+1, f1/f2 FROM test;
WARNING: division by zero
CONTEXT: referenced column: f2
WARNING: null value in column
"f2" violates not-null constraint
DETAIL: Failing row contains (2,
null).
WARNING: division by zero
CONTEXT: referenced column: f2
WARNING: null value in column
"f2" violates not-null constraint
DETAIL: Failing row contains (4,
null).
WARNING: division by zero
CONTEXT: referenced column: f2
WARNING: null value in column
"f2" violates not-null constraint
DETAIL: Failing row contains (6,
null).
INSERT 0 3
MySQL产生的warnings条数
mysql> CREATE TABLE test(f1 INT,
f2 INT not null);
Query OK, 0 rows aected (0.01
sec)
mysql> INSERT INTO test
VALUES(1,0),(3,0),(5,0);
Query OK, 3 rows aected (0.00
sec)
Records: 3 Duplicates: 0
Warnings: 0
mysql> INSERT IGNORE INTO test
SELECT f1+1, f1/f2 FROM test;
Query OK, 3 rows aected, 4
warnings (0.00 sec)
Records: 3 Duplicates: 0
Warnings: 4
MySQL数据库和GaussDB
INSERT IGNORE在触发器中的
差异,例如:
GaussDB触发器中使用
INSERT IGNORE
gaussdb=# CREATE TABLE test1(f1
INT NOT NULL);
CREATE TABLE
gaussdb=# CREATE TABLE test2(f1
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 356
序号 概述 详细语法说
差异
INT);
CREATE TABLE
gaussdb=# CREATE OR REPLACE
FUNCTION trig_test() RETURNS
TRIGGER AS $$
gaussdb$# BEGIN
gaussdb$# INSERT IGNORE INTO
test1 VALUES(NULL);
gaussdb$# RETURN NEW;
gaussdb$# END;
gaussdb$# $$ LANGUAGE plpgsql;
CREATE FUNCTION
gaussdb=# CREATE TRIGGER trig2
BEFORE INSERT ON test2 FOR
EACH ROW EXECUTE PROCEDURE
trig_test();
CREATE TRIGGER
gaussdb=# INSERT INTO test2
VALUES(NULL);
WARNING: null value in column
"f1" violates not-null constraint
DETAIL: Failing row contains (null).
CONTEXT: SQL statement "INSERT
IGNORE INTO test1
VALUES(NULL)"
PL/pgSQL function trig_test() line
3 at SQL statement
INSERT 0 1
gaussdb=# SELECT * FROM test1;
f1
----
0
(1 rows)
gaussdb=# SELECT * FROM test2;
f1
----
(1 rows)
MySQL触发器中使用INSERT
IGNORE
mysql> CREATE TABLE test1(f1 INT
NOT NULL);
Query OK, 0 rows aected (0.01
sec)
mysql> CREATE TABLE test2(f1
INT);
Query OK, 0 rows aected (0.00
sec)
mysql> DELIMITER ||
mysql> CREATE TRIGGER trig2
BEFORE INSERT ON test2 FOR
EACH ROW
-> BEGIN
-> INSERT IGNORE into test1
values(NULL);
-> END||
Query OK, 0 rows aected (0.01
sec)
mysql> DELIMITER ;
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 357
序号 概述 详细语法说
差异
mysql> INSERT INTO test2
VALUES(NULL);
ERROR 1048 (23000): Column 'f1'
cannot be null
mysql> INSERT IGNORE INTO test2
VALUES(NULL);
Query OK, 1 row aected (0.00 sec)
mysql> SELECT * FROM test1;
+----+
| f1 |
+----+
| 0 |
+----+
1 row in set (0.00 sec)
mysql> SELECT * FROM test2;
+------+
| f1 |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
GaussDBboolserial的实现
机制与MySQL不同,因此其默
认零值与MySQL不同,例如:
GaussDB的行为
gaussdb=# CREATE TABLE test(f1
SERIAL, f2 BOOL NOT NULL);
NOTICE: CREATE TABLE will create
implicit sequence "test_f1_seq" for
serial column "test.f1"
CREATE TABLE
gaussdb=# INSERT IGNORE INTO
test values(NULL,NULL);
WARNING: null value in column
"f1" violates not-null constraint
DETAIL: Failing row contains (null,
null).
WARNING: null value in column
"f2" violates not-null constraint
DETAIL: Failing row contains (null,
null).
INSERT 0 1
gaussdb=# SELECT * FROM test;
f1 | f2
----+----
0 | f
(1 row)
MySQL的行为
mysql> CREATE TABLE test(f1
SERIAL, f2 BOOL NOT NULL);
Query OK, 0 rows aected (0.00
sec)
mysql> INSERT IGNORE INTO test
values(NULL,NULL);
Query OK, 1 row aected, 1
warning (0.00 sec)
mysql> SELECT * FROM test;
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 358
序号 概述 详细语法说
差异
+----+----+
| f1 | f2 |
+----+----+
| 1 | 0 |
+----+----+
1 row in set (0.00 sec)
8
HAVING语法 SELECT GaussDBHAVING必须仅引用
GROUP BY子句中的列或聚合函数
中使用的列。但是,MySQL支持对
此行为的扩展,并允许HAVING
用列表中的SELECT列和外部子查
询中的列。
8.1.1.7.3 DCL
序号 概述 详细语法说明 差异
1 SET NAMES指定
COLLATE字句
SET [ SESSION |
LOCAL ] NAMES
{'charset_name'
[COLLATE
'collation_name'] |
DEFAULT};
GaussDB中暂不支持指定
charset_name与数据库字
符集不同。具体请参考
《开发指南》中“SQL
> SQL语法 > S >
SET ”章节。
8.1.1.8 驱动
8.1.1.8.1 JDBC
8.1.1.8.1.1 JDBC 接口参考
获取结果集中的数据
ResultSet对象提供了丰富的方法,以获取结果集中的数据。获取数据常用的方法如
8-21所示,其他方法请参考JDK官方文档。
8-21 ResultSet 对象的常用方法
方法
描述 差异
int getInt(int
columnIndex)
按列标获取
int型数据。
-
int getInt(String
columnLabel)
按列名获取
int型数据。
-
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 359
方法 描述 差异
String
getString(int
columnIndex)
按列标获取
String型数
据。
字段类型为整型且带有ZEROFILL属性时,
GaussDB按照ZEROFILL属性要求的宽度信息用0
进行补位后输出结果,MySQL直接输出结果。
String
getString(String
columnLabel)
按列名获取
String型数
据。
字段类型为整型且带有ZEROFILL属性时,
GaussDB按照ZEROFILL属性要求的宽度信息用0
进行补位后输出结果,MySQL直接输出结果。
Date getDate(int
columnIndex)
按列标获取
Date型数据
-
Date
getDate(String
columnLabel)
按列名获取
Date型数
据。
-
8.2 主备版
8.2.1 概述
本手册为GaussDB数据库(B兼容模式和M-Compatibility兼容模式)与MySQL 5.7
据库信息对比。其中,MySQL数据库兼容性B模式B模式下的MySQL数据库兼容
性;MySQL数据库兼容性M-Compatibility模式M-Compatibility模式下的MySQL
数据库兼容性说明。
8.2.2 MySQL 数据库兼容性 B 模式
8.2.2.1 MySQL 数据库兼容性概述
本章节主要介绍GaussDB数据库的MySQL 5.7兼容模式(即sql_compatibility = 'B'
且设置参数b_format_version='5.7'b_format_dev_version='s1'时)与MySQL5.7数据
库的兼容性对比信息。仅介绍503.0.0版本后新增的兼容性特性,特性的相关规格和约
束建议在开发指南中查看。
GaussDB数据库在数据类型、SQL功能和数据库对象等基本功能上与MySQL数据库兼
容。
由于GaussDB数据库与MySQL数据库底层框架实现存在差异,GaussDB数据库与
MySQL数据库仍存在部分差异。
8.2.2.2 数据类型
GaussDB的数据类型的大部分功能场景与MySQL一致,但存在部分差异。
除特别说明,部分数据类型精度、标度、位数大小等不支持用浮点型数值定义,
建议使用合法的整型数值定义。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 360
8.2.2.2.1 数值数据类型
8-22 整数类型
序号
MySQL数据
GaussDB
据库
差异
1 BOOL 不完全兼容 MySQLBOOL/BOOLEAN类型实际映射为
TINYINT类型。
GaussDB:支持BOOL,其中:
“真”值的有效文本值是:TRUE't'
'true''y''yes''1' 'TRUE'true
'on'以及所有非0数值。
“假”值的有效文本值是:FALSE'f'
'false''n''no''0'0'FALSE'
false'o'
使用TRUEFALSE是比较规范的用法(也是
SQL兼容的用法)。
2 BOOLEAN 不完全兼容
3 TINYINT[(M
)]
[UNSIGNED
]
支持
详细请参见说明。
4 SMALLINT[(
M)]
[UNSIGNED
]
支持
详细请参见说明。
5 MEDIUMIN
T[(M)]
[UNSIGNED
]
支持
MySQL存储MEDIUMINT数据需要3字节。
带符号的范围是-8,388,608 ~
+8,388,607
无符号的范围是0 ~ +16,777,215
GaussDB映射为INT类型,存储需要4字节。
带符号的范围是-2,147,483,648 ~
+2,147,483,647
无符号的范围是0 ~ +4,294,967,295
其他差异请参见说明。
6 INT[(M)]
[UNSIGNED
]
支持
详细请参见说明。
7 INTEGER[(M
)]
[UNSIGNED
]
支持
详细请参见说明。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 361
序号 MySQL数据
GaussDB
据库
差异
8 BIGINT[(M)
]
[UNSIGNED
]
支持
详细请参见说明。
输入格式:
MySQL
对于类似“asbd“、“12dd“、“12 12“等字符场景的输入,会采取截断或返回0
并上报WARNING处理,在严格模式插表时失败。
GaussDB
整数类型(TINYINTSMALLINTMEDIUMINTINTINTEGERBIGINT)的
输入,当非法字符串部分被截断时,如“12@3”,会直接截断并无提示信息,插
表成功。
当整数类型全部被截断(如“@123”)或字符串为空时,返回0 且插表成功。
操作符:
+-*操作符
GaussDBINT/INTEGER/SMALLINT/BIGINT在进行运算时,返回值为类型本身,不会
向上提升类型,当返回值超范围时报错。
MySQL:支持提升类型到BIGINT后计算。
|&^~运算符
GaussDB:在类型所占用BIT位中计算;GaussDB^表示指数运算,如需使用异或运算
符,使用#替换。
MySQL:提升类型计算。
负数显示类型转换:
GaussDB:宽松模式结果为0,严格模式报错。
MySQL:依据其对应的二进制将最高位替换成数值位计算结果,例如(-1)::uint4 =
4294967295
其他差异:
INT[(M)]精度,MySQL控制格式化输出,GaussDB仅语法支持,不支持功能。
聚集函数:
varianceGaussDB表示样本方差,MySQL表示总体方差。
stddevGaussDB表示样本标准差,MySQL表示总体标准差。
显示宽度:
在为整型数字列指明宽度信息时,如果不同时指定ZEROFILL,则宽度信息在表结构描
述中不显示。
INSERT语句插入字符类型字段,GaussDB统一补齐0后插入。
JOIN USING语句,涉及类型推导,MySQL默认第一张表列,GaussDB若结果为有符号
类型则宽度信息失效,否则为第一张表字段宽度。
greatest/leastifnull/ifcase when / decodeMySQL不补齐0GaussDB在类型及
宽度信息一致时补齐0
作为函数/存储过程出入参、返回值时,MySQL支持功能、GaussDB语法不报错功能不
支持。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 362
8-23 任意精度类型
序号 MySQL数据
GaussDB
据库
差异
1 DECIMAL[(
M[,D])]
支持
操作符:GaussDB中“^”表示指数运算,
如需使用异或运算符,使用“#”替换;
MySQL中“^”表示异或。
取值范围:精度M,标度D不支持浮点型数
值输入,只支持整型数值输入。
输入格式:当字符串入参全部被截断时不
会报错,如‘@123’;只有被部分截断时
才会报错,如‘12@3’。
2 NUMERIC[(
M[,D])]
支持
3 DEC[(M[,D])
]
支持
4 FIXED[(M[,D
])]
不支持 -
8-24 浮点类型
序号 MySQL数据
GaussDB
据库
差异
1 FLOAT[(M,D
)]
支持
分区表支持:FLOAT数据类型不支持KEY
值分区策略分区表。
操作符:GaussDB中“^”表示指数运算,
如需使用异或运算符,使用“#”替换;
MySQL中“^”表示异或。
取值范围:精度M,标度D不支持浮点型数
值输入,只支持整型数值输入。
输出格式:对于非法入参一律报错
ERROR,不会在sql_mode=''的宽松模式下
WARNING
2 FLOAT(p) 支持
分区表支持:FLOAT数据类型不支持KEY
值分区策略分区表。
操作符:数值类型使用^操作符,与
MySQL不一致,GaussDB^操作符为取
指数运算。
取值范围:定义精度p时,仅支持使用合法
的整型数据类型。
输出格式:精度M,标度D不支持浮点型数
值输入,只支持整型数值输入。
对于非法入参一律报错ERROR,不会在
sql_mode=''的宽松模式下报WARNING
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 363
序号 MySQL数据
GaussDB
据库
差异
3 DOUBLE[(M
,D)]
支持
分区表支持:DOUBLE数据类型不支持KEY
键值分区策略分区表。
操作符:GaussDB中“^”表示指数运算,
如需使用异或运算符,使用“#”替换;
MySQL中“^”表示异或。
取值范围:精度M,标度D不支持浮点型数
值输入,只支持整型数值输入。
输出格式:对于非法入参一律报错
ERROR,不会在sql_mode=''的宽松模式下
WARNING
4 DOUBLE
PRECISION[(
M,D)]
支持
操作符:GaussDB中“^”表示指数运算,
如需使用异或运算符,使用“#”替换;
MySQL中“^”表示异或
取值范围:精度M,标度D不支持浮点型数
值输入,只支持整型数值输入。
输出格式:对于非法入参一律报错
ERROR,不会在sql_mode=''的宽松模式下
WARNING
5 REAL[(M,D)
]
支持
分区表支持:REAL数据类型不支持KEY
分区策略分区表。
操作符:GaussDB中“^”表示指数运算,
如需使用异或运算符,使用“#”替换;
MySQL中“^”表示异或
取值范围:精度M,标度D不支持浮点型数
值输入,只支持整型数值输入。
输出格式:对于非法入参一律报错
ERROR,不会在sql_mode=''的宽松模式下
WARNING
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 364
8-25 序列整数
序号 MySQL数据
GaussDB
据库
差异
1 SERIAL 不完全兼容 SERIAL介绍详见GaussDB 开发指南数值类型
章节。
规格上与MySQL的差异如下:
CREATE TABLE test(f1 serial, f2 CHAR(20));
类型定义的差异,MySQLserial是映射到
BIGINT(20) UNSIGNED NOT NULL
AUTO_INCREMENT UNIQUEGaussDB
serial是映射到INTEGER NOT NULL
DEFAULT
nextval('test_f1_seq'::regclass)。如:
-- MySQL serial的定义:
mysql> SHOW CREATE TABLE test\G
*************************** 1. row ***************************
Table: test
Create Table: CREATE TABLE `test` (
`f1` bigint(20) unsigned NOT NULL
AUTO_INCREMENT,
`f2` char(20) DEFAULT NULL,
UNIQUE KEY `f1` (`f1`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
-- GaussDB serial的定义
gaussdb=# \d+ test
Table "public.test"
Column | Type |
Modiers | Storage | Stats target |
Description
--------+---------------
+---------------------------------------------------
+----------+--------------+-------------
f1 | integer | not null default
nextval('test_f1_seq'::regclass) | plain | |
f2 | character(20)
| | extended
| |
Has OIDs: no
Options: orientation=row, compression=no,
storage_type=USTORE
INSERT场景下serial类型DEFAULT值的差
异。如:
-- MySQL插入serialDEFAULT
mysql> INSERT INTO test VALUES(DEFAULT, 'aaaa');
Query OK, 1 row aected (0.00 sec)
mysql> INSERT INTO test VALUES(10, 'aaaa');
Query OK, 1 row aected (0.00 sec)
mysql> INSERT INTO test VALUES(DEFAULT, 'aaaa');
Query OK, 1 row aected (0.00 sec)
mysql> SELECT * FROM test;
+----+------+
| f1 | f2 |
+----+------+
| 1 | aaaa |
| 10 | aaaa |
| 11 | aaaa |
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 365
序号 MySQL数据
GaussDB
据库
差异
+----+------+
3 rows in set (0.00 sec)
-- GaussDB插入serialDEFAULT
gaussdb=# INSERT INTO test VALUES(DEFAULT,
'aaaa');
INSERT 0 1
gaussdb=# INSERT INTO test VALUES(10, 'aaaa');
INSERT 0 1
gaussdb=# INSERT INTO test VALUES(DEFAULT,
'aaaa');
INSERT 0 1
gaussdb=# SELECT * FROM test;
f1 | f2
----+----------------------
1 | aaaa
2 | aaaa
10 | aaaa
(3 rows)
REPLACE场景下serial类型引用列的差异,
GaussDB引用列的介绍详见GaussDB 开发
指南REPLACE语法章节。如:
-- MySQL插入serial引用列的值
mysql> REPLACE INTO test VALUES(f1, 'aaaa');
Query OK, 1 row aected (0.00 sec)
mysql> REPLACE INTO test VALUES(f1, 'bbbb');
Query OK, 1 row aected (0.00 sec)
mysql> SELECT * FROM test;
+----+------+
| f1 | f2 |
+----+------+
| 1 | aaaa |
| 2 | bbbb |
+----+------+
2 rows in set (0.00 sec)
-- GaussDB插入serial引用列的值
gaussdb=# REPLACE INTO test VALUES(f1, 'aaaa');
REPLACE 0 1
gaussdb=# REPLACE INTO test VALUES(f1, 'bbbb');
REPLACE 0 1
gaussdb=# SELECT * FROM test;
f1 | f2
----+----------------------
0 | aaaa
0 | bbbb
(2 rows)
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 366
8.2.2.2.2 日期与时间数据类型
8-26 日期与时间数据类型
MySQL数据
GaussDB
据库
差异
1 DATE 支持 GaussDB支持date数据类型,与MySQL相比
规格上存在如下差异:
输入格式
GaussDB只支持字符类型,不支持数值
类型。如支持'2020-01-01'
'20200101'字符串格式,不支持
20200101数值输入。MySQL支持数值
输入转换为date类型。
分隔符:GaussDB不支持加号“+”、
冒号“:”作为年、月、日之间的分隔
符,其他的符号都支持。MySQL所有符
号均可作为分隔符。 分隔符混合使用
的某些场景也不支持,与MySQL也有差
异,如'2020-01>01''2020/01+01'
等,不建议混合使用分隔符,建议使用
最常用的“-”、“/”作为分隔符。
无分隔符:推荐使用完整格式,如
'YYYYMMDD' 或者 'YYMMDD'。其他
不完整的格式(包括超长格式)解析的
规则与MySQL存在差异,可能报错或者
解析的结果与MySQL不一致,不推荐使
用。
输出格式
GaussDBsql_mode参数不包含
'strict_trans_tables'选项(定义为宽松模
式,否则为严格模式)时,允许年、月、
日的值是0,但是输出时会按照年、月、日
的顺序依次转换为合法的值,如date
'0000-00-10' 转换为:0002-12-10 BC
非法输入或者超过范围时,会报warning
信息,并返回0000-00-00值。MySQL对于
包含0值年、月、日的date值会原样输出。
取值范围
GaussDB的范围是4713-01-01 BC ~
5874897-12-31 AD,支持公元前的日期,
宽松模式下超过范围时,返回的是0值:
0000-00-00,严格模式下会报错。MySQL
的范围是 0000-00-00 ~ 9999-12-31,宽
松模式下超过范围后,各个场景下的表现
并不一致,可能报错(如select查询语句
中),也可能返回0000-00-00值(如
insert时)。此差异会导致date类型作为函
数入参时,函数返回的结果存在差异。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 367
MySQL数据
GaussDB
据库
差异
操作符
GaussDB仅支持date类型之间的比较操
作符“=”、“!=”、“<”、“<=”、
>”、“>=”,返回true或者false
dateinterval类型的加法运算,返回
结果为date类型;dateinterval类型
的减法运算,返回结果为date类型;
date类型之间的减法运算,返回结果为
interval类型。
MySQL date类型和其他数值类型运算
时,会先将date转换为数值类型,然后
按照数值类型运算,结果也为数值类
型。与GaussDB存在差异。如:
-- MySQL date + 数值,先将date类型转换为数值
20200101,再与1相加,结果为数值类型20200102
mysql> select date'2020-01-01' + 1;
+----------------------+
| date'2020-01-01' + 1 |
+----------------------+
| 20200102 |
+----------------------+
1 row in set (0.00 sec)
-- GaussDB date + 数值,数值类型会转换为interval
类型 1 day,然后相加得到新的日期。
gaussdb=# select date'2020-01-01' + 1;
?column?
------------
2020-01-02
(1 row)
类型转换
相比较MySQLGaussDB仅支持date类型
char(n)nchar(n)datetime
timestamp类型之间的相互转换,不支持
binarydecimaljsoninteger
unsigned integertime 类型之间的转
换。集合等场景和复杂表达式场景下公共
类型的确定原则与MySQL也不一致,参考
数据类型转换章节的描述。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 368
MySQL数据
GaussDB
据库
差异
2 DATETIME[(f
sp)]
支持 GaussDB支持datetime数据类型,与MySQL
相比规格上存在如下差异:
输入格式:
GaussDB只支持字符类型,不支持数值
类型。如支持'2020-01-01
10:20:30.123456'
'20200101102030.123456'字符串格
式,不支持如
20200101102030.123456的数值类型
输入。MySQL支持数值输入转换为
datetime类型。
分隔符:GaussDB不支持加号“+”、
冒号“:”作为年、月、日之间的分隔
符,其他的符号都支持。仅支持冒号
:”作为时、分、秒之间的分隔符,其
他的符号都不支持。分隔符混合使用的
某些场景也不支持,与MySQL也有差
异,不推荐使用。MySQL支持所有符号
作为分隔符。
无分隔符:GaussDB推荐使用完整格式
'YYYYMMDDhhmiss.'。其他不完
整的格式(包括超长格式)解析的规则
可能与MySQL存在差异,可能报错或者
解析的结果与MySQL不一致,不推荐使
用。
输出格式:
统一为'YYYY-MM-DD hh:mi:ss.'
格式,格式与MySQL无差异,且不受
DateStyle参数的影响。但是对于精度
部分,如果最后几位为0GaussDB
显示,MySQL会显示。
GaussDBsql_mode参数不包含
'strict_trans_tables'选项(定义为宽松
模式,否则为严格模式)时,允许年、
月、日值是0,但是输出时会按照年、
月、日的顺序依次转换为合法的值,如
datetime '0000-00-10 00:00:00' 转换
为:0002-12-10 00:00:00 BC 非法输
入或者超过范围时,会报warning
息,并返回0000-00-00 00:00:00值。
MySQL对于包含0值年、月、日的
datetime值会原样输出。
取值范围
4713-11-24 00:00:00.000000 BC ~
294277-01-09 04:00:54.775806 AD
294277-01-09 04:00:54.775807 AD 返回
的是innity。对于超过范围的值,严格模
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 369
MySQL数据
GaussDB
据库
差异
式下GaussDB会报错,MySQL是否报错取
决于使用场景。一般查询场景不报错,而
执行DML SQL语句更改表属性的值时报
错。宽松模式下GaussDB返回0000-00-00
00:00:00值,MySQL根据使用场景可能报
错,也可能返回0000-00-00 00:00:00值或
null值。这个差异会导致以datetime
型为入参的函数执行结果与MySQL也存在
差异。
精度
范围0~6,作为表列的类型时缺省为0,与
MySQL一致。对于 datetime[(p)] 'str'
达式场景,GaussDB(p)作为精度解析,
缺省为6,将'str'按照p指定的精度格式化
datetime类型。MySQL不支持
datetime[(p)] 'str'表达式。
操作符
GaussDB仅支持datetime类型之间的比
较操作符“=”、“!=”、“<”、
<=”、“>”、“>=”,返回true
falsedatetimeinterval类型的加
法运算,返回结果为datetime类型;
datetimeinterval 类型的减法运算,
返回结果为datetime类型;datetime
型之间的减法运算,返回结果为
interval类型。
MySQL datetime类型和其他数值类型
运算时,会先将datetime转换为数值类
型,然后按照数值类型运算,结果也为
数值类型。与GaussDB存在差异。如:
-- MySQL datetime + 数值,先将datetime类型转换
为数值20201010123456,再与1相加,结果为数值类型
20201010123457
mysql> select cast('2020-10-10 12:34:56.123456' as
datetime) + 1;
+----------------------------------------------------+
| cast('2020-10-10 12:34:56.123456' as datetime) + 1
|
+----------------------------------------------------+
| 20201010123457 |
+----------------------------------------------------+
1 row in set (0.00 sec)
-- GaussDB datetime + 数值,数值类型会转换为
interval类型 1 day,然后相加得到新的datetime
gaussdb=# select cast('2020-10-10 12:34:56.123456'
as datetime) + 1;
?column?
---------------------
2020-10-11 12:34:56
(1 row)
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 370
MySQL数据
GaussDB
据库
差异
datetime类型与数值的运算结果作为函
数的入参,可能导致函数的结果与MySQL
也存在差异。
类型转换
相比较MySQLGaussDB仅支持datetime
类型与char(n)nchar(n)timestamp
型之间的相互转换、datetimedate
time类型的转换(仅赋值和显式转换)。
不支持与binarydecimaljson
integerunsigned integer类型之间的转
换。集合等场景和复杂表达式场景下公共
类型的确定原则与MySQL也不一致,参考
数据类型转换章节的描述。
时区
GaussDB支持datetime值中携带时区信息
(时区偏移或者时区名),如'2020-01-01
12:34:56.123456 +01:00' 或者
'2020-01-01 2:34:56.123456 CST'
GaussDB会将其转换为当前服务器时区的
时间。MySQL不支持(5.7版本不支持,
8.0及之后的版本支持)。
GaussDBdatetime数据类型的表字段实
际上会被转换为timestamp(p) without
time zone类型,查询表信息或者使用工具
导出的表结构,其字段的数据类型显示的
timestamp(p) without time zone,而
不是datetimeMySQL显示的是
datetime(p)
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 371
MySQL数据
GaussDB
据库
差异
3 TIMESTAMP[
(fsp)]
支持 GaussDB支持timestamp数据类型,与
MySQL相比规格上存在如下差异:
输入格式
只支持字符类型,不支持数值类型。如
支持'2020-01-01 10:20:30.123456'
'20200101102030.123456'字符串格
式,不支持如
20200101102030.123456的数值类型
输入。MySQL支持数值输入转换为
timestamp类型。
分隔符:不支持加号“+”、冒号“:
作为年、月、日之间的分隔符,其他的
符号都支持。仅支持冒号“:”作为时、
分、秒之间的分隔符,其他的符号都不
支持。分隔符混合使用的某些场景也不
支持,与MySQL也有差异,不推荐使
用。MySQL支持所有符号作为分隔符。
无分隔符:推荐使用完整格式
'YYYYMMDDhhmiss.'。其他不完
整的格式(包括超长格式)解析的规则
可能与MySQL存在差异,可能报错或者
解析的结果与MySQL不一致,不推荐使
用。
输出格式
统一为'YYYY-MM-DD hh:mi:ss.'
格式,格式与MySQL无差异,且不受
DateStyle参数的影响。但是对于精度
部分,如果最后几位为0GaussDB
显示,MySQL会显示。
GaussDBsql_mode参数不包含
'strict_trans_tables'选项(定义为宽松
模式,否则为严格模式)时,允许年、
月、日值是0,但是输出时会按照年、
月、日的顺序依次转换为合法的值,如
timestamp '0000-00-10 00:00:00'
换为:0002-12-10 00:00:00 BC 非法
输入或者超过范围时,会报warning
息,并返回0000-00-00 00:00:00值。
MySQL对于包含0值年、月、日的
timestamp值会原样输出。
取值范围
4713-11-24 00:00:00.000000 BC ~
294277-01-09 04:00:54.775806 AD
294277-01-09 04:00:54.775807 AD 返回
的是innity。对于超过范围的值,严格模
式下GaussDB会报错,MySQL是否报错取
决于使用场景。一般查询场景不报错,而
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 372
MySQL数据
GaussDB
据库
差异
执行DML SQL语句更改表属性的值时报
错。宽松模式下GaussDB返回0000-00-00
00:00:00值,MySQL根据使用场景可能报
错,也可能返回0000-00-00 00:00:00值或
null值。这个差异会导致以timestamp
型为入参的函数执行结果与MySQL也存在
差异。
精度
范围0~6,作为表列的类型时缺省为0,与
MySQL一致。对于 timestamp[(p)] 'str'
表达式场景:
GaussDB(p)作为精度解析,缺省为
6,将'str'按照p指定的精度格式化成
timestamp类型。
MySQLtimestamp 'str'的含义与
GaussDB一致,缺省精度也为6。但是
timestamp(p) 'str'解析为函数调用,
p作为timestamp函数的入参,结果返
回一个timestamp类型的值,'str'作为
投影列的别名。
操作符
GaussDB仅支持timestamp类型之间的
比较操作符“=”、“!=”、“<”、
<=”、“>”、“>=”,返回true
falsetimestampinterval类型的
加法运算,返回结果为timestamp
型;timestampinterval类型的减法运
算,返回结果为timestamp类型;
timestamp类型之间的减法运算,返回
结果为interval类型。
MySQL timestamp类型和其他数值类
型运算时,会先将timestamp转换为数
值类型,然后按照数值类型运算,结果
也为数值类型。与GaussDB存在差异。
如:
-- MySQL timestamp + 数值,先将timestamp类型
转换为数值20201010123456.123456,再与1相加,结果
为数值类型20201010123457.123456
mysql> select timestamp '2020-10-10
12:34:56.123456' + 1;
+--------------------------------------------+
| timestamp '2020-10-10 12:34:56.123456' + 1 |
+--------------------------------------------+
| 20201010123457.123456 |
+--------------------------------------------+
1 row in set (0.00 sec)
-- GaussDB timestamp + 数值,数值类型会转换为
interval类型 1 day,然后相加得到新的timestamp
gaussdb=# select timestamp '2020-10-10
12:34:56.123456' + 1;
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 373
MySQL数据
GaussDB
据库
差异
?column?
----------------------------
2020-10-11 12:34:56.123456
(1 row)
timestamp类型与数值的运算结果作为
函数的入参,可能导致函数的结果与
MySQL也存在差异。
类型转换
相比较MySQLGaussDB仅支持
timestamp类型与char(n)varchar(n)
datetime类型之间的相互转换、
timestampdatetime类型的转换(仅
赋值和显式转换)。不支持与binary
decimaljsonintegerunsigned
integer类型之间的转换。集合等场景和复
杂表达式场景下公共类型的确定原则与
MySQL也不一致,参考数据类型转换章节
的描述。
时区
GaussDB支持timestamp值中携带时区信
息(时区偏移或者时区名),如
'2020-01-01 12:34:56.123456 +01:00'
'2020-01-01 2:34:56.123456 CST'
GaussDB会将其转换为当前服务器时区的
时间。如果更改服务器时区,timestamp
类型的值输出时会转换为更改后时区的时
间戳。MySQL不支持(5.7版本不支持,
8.0及之后的版本支持)。
GaussDBtimestamp数据类型的表字段
实际上会被转换为timestamp(p) with
time zone类型,查询表信息或者使用工具
导出的表结构,其字段的数据类型显示的
timestamp(p) with time zone,而不是
timestampMySQL显示的是
timestamp(p)
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 374
MySQL数据
GaussDB
据库
差异
4 TIME[(fsp)] 支持 GaussDB支持time数据类型,与MySQL相比
规格上存在如下差异:
输入格式
只支持字符类型,不支持数值类型。如
支持'1 10:20:30''102030'字符串格
式,不支持102030数值输入。MySQL
支持数值输入转换为time类型。
分隔符:GaussDB仅支持冒号“:”作为
时、分、秒之间的分隔符,其他的符号
都不支持。MySQL支持所有的符号作为
分隔符。
无分隔符:推荐使用完整格式,如
'hhmiss.'。其他不完整的格式(包
括超长格式)解析的规则可能与MySQL
存在差异,可能报错或者解析的结果与
MySQL不一致,不推荐使用。
分、秒、精度输入负数时,GaussDB
据库可能会忽略第一个负数开始的部
分,涉及的部分解析为0,如:
'00:00:-10' 解析结果为 '00:00:00'
可能报错,如:'00:00:-10000' 会解析
报错。取决于输入值的范围。而MySQL
数据库统一报错。
输出格式
统一为hh:mi:ss.的格式,格式与
MySQL无差异。但是对于精度部分,如果
最后几位为0GaussDB不显示,MySQL
会显示。
取值范围
-838:59:59.000000 ~ 838:59:59.000000
MySQL一致。对于超过范围的值,宽松
模式下GaussDB无论是查询还是insert/
updateDML操作,返回的值都是就近的
边界值:-838:59:59838:59:59MySQL
是查询时报错,DML操作返回的值才是就
近边界值,场景上存在差异。此差异会导
time类型作为函数入参时,函数返回的
结果也存在差异。
精度
范围0~6,作为表列的类型时缺省为0,与
MySQL一致。对于 time(p) 'str' 表达式场
景,GaussDB(p)作为精度解析,缺省为
6,将'str'按照p指定的精度格式化成time
类型。MySQL是解析为time函数,p是入
参,'str'是投影列的别名。
操作符
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 375
MySQL数据
GaussDB
据库
差异
GaussDB仅支持time类型之间的比较操
作符“=”、“!=”、“<”、“<=”、
>”、“>=”,返回true或者false
timeinterval类型的加法运算,返回
结果为time类型;timeinterval类型
的减法运算,返回结果为time类型;
time类型之间的减法运算,返回结果为
interval类型。
MySQL time类型和其他数值类型运算
时,会先将time转换为数值类型,然后
按照数值类型运算,结果也为数值类
型。与GaussDB存在差异。如:
-- MySQL time + 数值,先将time类型转换为数值
123456,再与1相加,结果为数值类型123457
mysql> select time '12:34:56' + 1;
+---------------------+
| time '12:34:56' + 1 |
+---------------------+
| 123457 |
+---------------------+
1 row in set (0.00 sec)
-- GaussDB time + 数值,数值类型会转换为interval
类型 1 day,然后相加得到新的time,由于是加了24
时,得到的仍然是12:34:56
gaussdb=# select time '12:34:56' + 1;
?column?
----------
12:34:56
(1 row)
time类型与数值的运算结果作为函数的
入参,可能导致函数的结果与MySQL也存
在差异。
类型转换
相比较MySQLGaussDB仅支持time类型
char(n)nchar(n)类型之间的相互转
换、datetimetimestamptime类型的
转换。不支持与binarydecimaldate
jsonintegerunsigned integer类型之
间的转换。集合等场景和复杂表达式场景
下公共类型的确定原则与MySQL也不一
致,参考数据类型转换章节的描述。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 376
MySQL数据
GaussDB
据库
差异
5 YEAR[(4)] 支持 GaussDB支持year数据类型,与MySQL相比
规格上存在如下差异:
操作符
GaussDB仅支持year类型之间的比较操
作符“=”、“!=”、“<”、“<=”、
>”、“>=”,返回true或者false
GaussDB仅支持year类型与int4类型之
间的算术操作符“+”、“-”,返回整
型值,MySQL是返回无符号整型值。
类型转换
相比较MySQLGaussDB仅支持year类型
int4类型的转换,仅支持int4
varcharnumericdatetime
timestamptimestamptz类型到year类型
的转换。集合等场景和复杂表达式场景下
公共类型的确定原则与MySQL也不一致,
参考数据类型转换章节的描述。
6 INTERVAL 支持 GaussDB支持INTERVAL数据类型,但
INTERVALMySQL中为表达式,同时存在以
下差异:
不支持字符串类型的日期输入作为运算,
如:select '2023-01-01' + interval 1
day
不支持interval expr unit语法中,expr
负整数或浮点数的输入,如:select
date'2023-01-01' + interval -1 day
不支持interval expr unit语法中,expr
运算表达式的输入,如:select
date'2023-01-01' + interval 4/2 day
interval表达式参与运算时,返回值固定为
datetime类型,MySQLdatetimedate
类型。运算的逻辑与原有GaussDB保持一
致,与MySQL有差异。
interval expr unit语法中,expr数值支持
的范围会根据unit单位的不同有所差异,
最大可支持的范围为[-2147483648,
2147483647]。超过范围时,严格模式报
error,宽松模式报warning并返回0值。
interval expr unit语法中,expr指定的字
段数量大于unit预期的字段数量时,在严
格模式,报error;在宽松模式,报
warning并返回0值。如unit取值为
DAY_HOUR,预期的字段数量为2expr
取值为'1-2-3',字段数量为3
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 377
8.2.2.2.3 字符串数据类型
8-27 字符串数据类型
MySQ数据库 GaussDB
据库
差异
1 CHAR[(M)] 支持
输入格式
GaussDB自定义函数参数和返回值不支
持长度校验,存储过程参数不支持长度
校验,同时也不支持在
PAD_CHAR_TO_FULL_LENGTH打开时
补齐正确的空格,MySQL支持。
GaussDB不支持转义字符输入,不支持
""双引号输入,MySQL支持。
语法
GaussDB Castexpr as char)语法无
法根据输入的字符串长度转成对应的类
型,只支持转成varchar类型。不支持
cast(‘’ as char) cast(‘’ as
char(0))将空串转成char(0)类型。MySQL
支持按长度转成对应的类型。
操作符
GaussDB能正常转成浮点型的字符串与
整型值加减乘除求余,返回值是整型
值,MySQL是返回浮点型。
GaussDB除以0会报错,MySQL返回
null
~”:GaussDB返回负数,MySQL
8字节无符号整数。
^”:GaussDB表示次方幂,MySQL
表示按位异或。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 378
MySQ数据库 GaussDB
据库
差异
2 VARCHAR(M
)
支持
输入格式:
GaussDB的自定义函数参数和返回值不
支持长度校验,存储过程参数不支持长
度校验,MySQL支持。
GaussDB的自定义函数和存储过程中的
临时变量支持长度校验以及严格宽松模
式下的报错和截断告警,MySQL不支
持。
GaussDB不支持转义字符输入,不支持
""双引号输入,MySQL支持。
操作符
GaussDB能正常转成浮点型的字符串与
整型值加减乘除求余,返回值是整型
值,MySQL是返回浮点型。
GaussDB除以0会报错,MySQL返回
null
~”:GaussDB返回负数,MySQL
8字节无符号整数。
^”:GaussDB表示次方幂,MySQL
表示按位异或。
3
TINYTEXT 支持
输入格式
GaussDB不支持长度限制255字节(最
大不超过1G),不支持超限后,根据
严格宽松模式报错和截断告警。
MySQL支持。
GaussDB不支持转义字符输入,不支持
""双引号输入,MySQL支持。
操作符
GaussDB能正常转成浮点型的字符串与
整型值加减乘除求余,返回值是整型
值,MySQL是返回浮点型。
GaussDB除以0会报错,MySQL返回
null
~”:GaussDB返回负数,MySQL
8字节无符号整数。
^”:GaussDB表示次方幂,MySQL
表示按位异或。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 379
MySQ数据库 GaussDB
据库
差异
4 TEXT 支持
输入格式
GaussDB不支持长度限制65535字节
(最大不超过1G),不支持超限后,
根据严格宽松模式报错和截断告警。
MySQL支持。
GaussDB不支持转义字符输入,不支持
""双引号输入,MySQL支持。
操作符
GaussDB能正常转成浮点型的字符串与
整型值加减乘除求余,返回值是整型
值,MySQL是返回浮点型。
GaussDB除以0会报错,MySQL返回
null
~”:GaussDB返回负数,MySQL
8字节无符号整数。
^”:GaussDB表示次方幂,MySQL
表示按位异或。
5 MEDIUMTEX
T
支持
输入格式
GaussDB不支持长度限制16777215
节(最大不超过1G),不支持超限
后,根据严格宽松模式报错和截断告
警。MySQL支持。
GaussDB不支持转义字符输入,不支持
""双引号输入,MySQL支持。
操作符
GaussDB能正常转成浮点型的字符串与
整型值加减乘除求余,返回值是整型
值,MySQL是返回浮点型。
GaussDB除以0会报错,MySQL返回
null
~”:GaussDB返回负数,MySQL
8字节无符号整数。
^”:GaussDB表示次方幂,MySQL
表示按位异或。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 380
MySQ数据库 GaussDB
据库
差异
6 LONGTEXT 支持
输入格式
GaussDB只支持不超过1GMySQL
4G-1字节长度。
GaussDB不支持转义字符输入,不支持
""双引号输入,MySQL支持。
操作符
GaussDB能正常转成浮点型的字符串与
整型值加减乘除求余,返回值是整型
值,MySQL是返回浮点型。
GaussDB除以0会报错,MySQL返回
null
~”:GaussDB返回负数,MySQL
8字节无符号整数。
^”:GaussDB表示次方幂,MySQL
表示按位异或。
7 ENUM('value
1','value2',...)
不支持 -
8 SET('value1','
value2',...)
支持 -
8.2.2.2.4 二进制数据类型
8-28 二进制数据类型
MySQL数据
GaussDB
据库
差异
1 BINARY[(M)] 不支持 -
2 VARBINARY(
M)
不支持 -
3 TINYBLOB 支持
取值范围:不支持长度限制255字节(最
大不超过1G),不支持超限后,根据严格
宽松模式报错和截断告警。
输入格式:不支持转义字符输入,不支持
""双引号输入。
操作符:不支持算数运算符“+”、
-”、“*”、“/”、“%”;不支持常
用逻辑运算符或、与、非(“||”、
&&”、“!”);不支持常用位运算符
~”、“&”、“|”、“^)
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 381
MySQL数据
GaussDB
据库
差异
4 BLOB 支持
取值范围:不支持长度限制65535字节
(最大不超过1G),不支持超限后,根据
严格宽松模式报错和截断告警。MySQL
持。
输入格式:不支持转义字符输入,不支持
""双引号输入。
操作符:不支持算数运算符“+”、
-”、“*”、“/”、“%”;不支持常
用逻辑运算符与、或、非(“||”、
&&”、“!”);不支持常用位运算符
~”、“&”、“|”、“^”。
5 MEDIUMBLO
B
支持
取值范围:不支持长度限制16777215
节(最大不超过1G),不支持超限后,根
据严格宽松模式报错和截断告警。MySQL
支持。
输入格式:不支持转义字符输入,不支持
""双引号输入。
操作符:不支持算数运算符“+”、
-”、“*”、“/”、“%”;不支持常
用逻辑运算符与、或、非(“||”、
&&”、“!”);不支持常用位运算符
~”、“&”、“|”、“^”。
6 LONGBLOB 支持
取值范围:只支持不超过1G,具体范围参
bytea数据类型集中式和分布式规格。
输入格式:不支持转义字符输入,不支持
""双引号输入。
操作符:不支持算数运算符“+”、
-”、“*”、“/”、“%”;不支持常
用逻辑运算符或、与、非(“||”、
&&”、“!”);不支持常用位运算符
~”、“&”、“|”、“^)
7 BIT[(M)] 不支持 -
8.2.2.2.5 JSON 数据类型
8-29 JSON 数据类型
序号
MySQ数据库 GaussDB数据库
1 JSON 不完全兼容
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 382
8.2.2.2.6 数据类型支持的属性
8-30 数据类型支持的属性
序号
MySQ数据库 GaussDB数据库
1 NULL 支持
2 NOT NULL 支持
3 DEFAULT 支持
4 ON UPDATE 支持
4 PRIMARY KEY 支持
5 AUTO_INCREMENT 支持
6 CHARACTER SET name 支持
7 COLLATE name 支持
8.2.2.2.7 数据类型转换
不同的数据类型之间支持转换。有如下场景涉及到数据类型转换:
操作符(比较操作符、运算操作符等)的操作数的数据类型不一致。常见于查询
条件或者关联条件中的比较运算。
函数调用时实参和形参的数据类型不一致。
DML语句要更新(包括insertupdatemergereplace等)的目标列,数据的
类型和列的定义类型不一致。
显式的类型转换:cast(expr as datatype),将expr表达式类型转换为datatype
型。
集合运算(UNIONMINUSEXCEPTINTERSECT)确定最终投影列的目标数
据类型后,各个SELECT查询的投影列的类型和目标数据类型不一致。
其他表达式计算场景,根据不同表达式的数据类型, 来决定用于比较或者最终结
果的目标数据类型。
DECODE
CASE WHEN
lexpr [ NOT ] IN (expr_list)
BETWEEN AND
JOIN USING(a,b)
GREATESTLEAST
NVL COALESCE
GaussDBMySQL数据库对于数据类型转换、转换的目标数据类型有着完全不同的规
则。如下示例体现了两者处理的差异:
-- MySQL in 执行结果为0,表示false。根据规则,会将'1970-01-01'与列表中的表达式依次比较,结果都为
0,因此最终结果为0
mysql> select '1970-01-01' in ('1970-01-02', 1, '1970-01-02');
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 383
+-------------------------------------------------+
| '1970-01-01' in ('1970-01-02', 1, '1970-01-02') |
+-------------------------------------------------+
| 0 |
+-------------------------------------------------+
-- GaussDB in 执行结果为true,与MySQL结果相反:根据规则选定的公共类型为int类型,因此将左表达式
'1970-01-01'转换为int类型与列表中的表达式转换为int类型后的值依次比较。
-- '1970-01-01''1970-01-02'转换为int类型时都为1970(兼容MySQL模式下,转换时遇到非法字符后忽略,将
前面部分转换为int类型),比较结果为相等,因此返回结果为true
gaussdb=# select '1970-01-01' in ('1970-01-02', 1::int, '1970-01-02') as result;
result
--------
t
(1 row)
1. 数据类型转换规则的差异:
GaussDB数据库对于不同数据类型之间的转换规则有明确的定义:
是否支持转换:pg_cast系统表中是否定义两种类型的转换路径,没有定义则
不支持。
支持转换的场景:支持任意场景转换、仅支持显式(cast表达式)转换、仅
支持赋值时转换。不支持的场景下即使定义了转换路径,也不能进行数据类
型转换。
MySQL数据库支持任意两种数据类型之间做转换。
由于存在以上差异,基于MySQL数据库的应用程序向GaussDB数据库迁移时,SQL
句可能由于不支持不同数据类型之间的转换而报错。或者支持转换的场景下,转换的
规则有差异导致SQL语句执行的结果不同。
推荐的做法是:SQL语句中尽量使用相同的数据类型做比较或者赋值等操作,避免因
为数据类型转换导致非预期结果或者性能损耗。
2. 选择目标数据类型的规则差异:
对于有些场景,比较的数据类型或者返回的数据类型需要综合考虑多个表达式的类型
才能确定。比如UNION运算中,不同SELECT语句中相同位置的投影列具有不同的数据
类型,查询结果的最终数据类型,需要由各个SELECT语句投影列的数据类型共同确
定。
确定目标数据类型的规则,GaussDB数据库和MySQL数据库存在体系上的差异。
GaussDB数据库规则:
操作符的操作数类型不一致时,并不是将操作数的类型统一转换为目标类型
再计算。而是直接注册两个数据类型的操作符,操作符处理中定义两个不同
类型的处理规则。此方式不存在类型隐式转换,但自定义的处理规则隐含了
转换的操作。
集合运算和表达式场景,确定目标数据类型的规则:
如果所有类型都相同,则此类型即为目标类型。
两个数据类型如果不同,检查数据类型是否属于同一种类的数据类型,
如数值类型、字符类型、日期时间类型等。不属于同一种类的数据类
型,无法确定目标类型,此时SQL语句执行会报错。
对于category属性(在pg_type系统表中定义)相同的数据类型,具有
preferred属性(在pg_type系统表中定义)的数据类型会被选为目标类
型。或者操作数1能转换为操作数2(没有转换路径),而操作数2无法转
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 384
换为操作数1或数值类型优先级小于操作数2,则选择操作数2作为目标类
型。
如果涉及到3个及以上的数据类型,确定目标类型的规则为:
common_type(type1,type2,type3) =
common_type(common_type(type1,type2),type3),依次迭代处理,得
到最终的结果。
对于INNOT IN表达式,如果根据以上规则无法确认目标类型,会将
lexprexpr_list中每一个表达式单独按照等值操作符(=)逐个比较。
精度的确定:以最终选定的表达式的精度作为最终结果。
MySQL数据库规则:
操作符的操作数类型不一致时,先按照如下规则确定目标类型。确定后将类
型不一致的操作数转换成目标类型后再做处理。
两个参数都是string类型,则都按照string类型比较。
两个参数都是integer类型,则都按照integer类型比较。
十六进制数值如果不与数值比较,则当做二进制字符串比较。
一个参数是datetime/timestamp类型,另一个参数是常量,将常量转换
为时间戳类型然后比较。
如果其中一个参数是decimal类型,比较时使用的数据类型取决于另外一
个参数。另外一个是decimal或者integer类型时,按照decimal类型;另
外一个是其他类型,按照real类型比较。
其他场景都转换为 real 类型后比较。
集合运算和表达式场景,确定目标数据类型的规则如下:
建立任意两个类型之间的目标类型矩阵。给定两个类型,通过矩阵即可
以确定目标类型。
如果涉及到3个及以上的数据类型,确定目标类型的规则为:
common_type(type1,type2,type3) =
common_type(common_type(type1,type2),type3),依次迭代处理,得
到最终的结果。
如果目标类型是integer类型,且各个表达式类型包含有符号和无符号的
混合场景,则会将类型提升到更高精度的integer类型。符号的确定:所
有表达式都是无符号时,结果才为无符号,否则结果为有符号。
精度确定:以表达式中的最大精度作为最终结果。
从以上规则可知:GaussDBMySQL数据库在数据类型的转换规则上有很大差异,不
能直接对比。在上述场景下,SQL语句的执行结果可能和MySQL数据库不一致。当前
版本推荐各个表达式使用相同的类型,或提前使用cast转换成需要的类型来规避差
异。
8.2.2.3 系统函数
GaussDB数据库兼容绝大多数MySQL的系统函数,但存在部分差异。如未列出,函数
行为默认为GaussDB原生行为。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 385
GaussDB MySQL兼容性的绝大部分系统函数目前均存在返回值与MySQL精度不一致(结果后面
0的位数)的问题,这是由于部分数据类型在某些场景下仍存在精度丢失问题,无法正确获取精
度,导致目前部分函数未完全做到适配。
8.2.2.3.1 流量控制函数
8-31 流量控制函数列表
MySQL
数据库
GaussD
B数据库
差异
1 IF() 支持
expr1入参仅支持bool类型。非bool类型入参若不能
转换为bool类型则报错。
expr2expr3两入参类型不同且两类型间不存在隐
式转换函数则报错。
两入参类型相同时,返回该入参类型。
expr2expr3两入参类型分别为NUMERIC
STRINGTIME其中一个时,输出为text类型,
MySQL输出为varchar类型。
2 IFNULL() 支持
expr1expr2两入参类型不同且两类型间不存在隐
式转换函数则报错。
两入参类型相同时,返回该入参类型。
expr1expr2两入参类型范畴分别为NUMEIRC
STRINGTIME其中一个时,输出为text类型,
MySQL输出为varchar类型。
两入参类型第一个入参为oat4,另一个为bigint
unsigned bigint时返回double类型,MySQL返回
oat类型。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 386
MySQL
数据库
GaussD
B数据库
差异
3 NULLIF() 支持
GaussDBNULLIF()类型推导遵从以下逻辑:
1. 如果两个参数的数据类型不同,且两入参类型存
在等值比较操作符,则返回对应等值操作符对应
的左值类型,否则会对两入参类型进行强制类型
兼容。
2. 若强制类型兼容后,存在等值比较操作符,则返
回强制类型兼容后对应等值操作符的左值类型。
3. 若强制类型兼容后,仍找不到对应等值操作符,
则报错。
--两入参类型存在等值比较操作符
gaussdb=# select pg_typeof(nullif(1::int2, 2::int8));
pg_typeof
-----------
smallint
(1 row)
--两入参类型不存在等值比较操作符,但在强制类型兼容后可以
找到等值比较操作符
gaussdb=# select pg_typeof(nullif(1::int1, 2::int2));
pg_typeof
-----------
bigint
(1 row)
--两入参类型不存在等值比较操作符,且强制类型兼容后也不存
在等值比较操作符
gaussdb=# SELECT nullif(1::bit, '1'::MONEY);
ERROR: operator does not exist: bit = money
LINE 1: SELECT nullif(1::bit, '1'::MONEY);
^
HINT: No operator matches the given name and argument
type(s). You might need to add explicit type casts.
CONTEXT: referenced column: nullif
MySQL输出类型仅与第一个入参类型有关:
1. 第一个入参为tinyintsmallintmediumint
intbool时,输出为int类型。
2. 第一个入参为bigint时,输出为bigint类型。
3. 第一个入参为unsigned tinyintunsigned
smallintunsigned mediumintunsigned int
bit时,输出为unsigned int类型。
4. 第一个入参为unsigned bigint时,输出为
unsigned bigint
5. 第一个入参为浮点型即oatdoublereal时,
输出为double类型。
6. 第一个入参类型为decimalnumeric类型时,输
出为decimal类型。
7. 第一个入参类型为时间类型或字符串类型即
datetimedatedatetimetimestamp
charvarchar以及tinytextenumset时,输出
varchar类型。
8. 第一个入参类型为textmediumtextlongtext
时,输出为longtext类型。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 387
MySQL
数据库
GaussD
B数据库
差异
9. 第一个入参类型为tinyblob时,输出为varbinary
类型。
10.第一个入参类型为mediumbloblongblob时,输
出为longblob类型。
11.第一个入参为blob时,输出为blob类型。
4
ISNULL() 支持 GaussDB中返回值为boolean类型的tfMySQL中返
回值为int类型的10
8.2.2.3.2 日期和时间函数
以下为GaussDB MySQL兼容性日期时间函数公共说明。
开发指南中函数入参为时间类型表达式的情况:
时间类型表达式主要包括TEXTDATETIMEDATETIME,但所有可以隐式转换为时间表
达式的类型都可以作为入参,比如数字类型可以通过先隐式转化为TEXT,再作为时间类型表
达式生效。
但是生效的情况根据函数有所不同,比如:DATEDIFF由于只计算日期的差值,所以时间表
达式会当做日期来解析。TIMESTAMPDIFF由于计算时间差值时是根据UNIT来决定的,所以
会根据UNIT选择将时间表达式当做DATE或者TIME或者DATETIME来解析。
函数入参为无效日期的情况:
一般而言,日期时间函数支持DATEDATETIME的范围和MySQL保持一致。DATE支持的范
围为'0000-01-01''9999-12-31'DATETIME支持的范围为'0000-01-01 00:00:00'
'9999-12-31 23:59:59'。虽然GaussDB支持的DATEDATETIME范围大于MySQL,但是越界
仍然算无效日期。
大部分时间函数会告警并返回NULL,只有能通过cast正常转换的日期,才是正常合理的日期。
GaussDB的日期时间函数的大部分功能场景与MySQL一致,但仍有差异,一些差异如
下:
函数入参为NULL时,函数返回NULL,无warningerror告警。这些函数包括:
from_daysdate_formatstr_to_datedateditimestampdidate_add
subtimemonthtime_to_secto_daysto_secondsdayname
monthnameconvert_tzsec_to_timeaddtimeadddatedate_sub
timedilast_dayweekdayfrom_unixtimeunix_timestampsubdate
dayyearweekofyeardayofmonthdayofyearweekyearweek
dayofweektime_formathourminutesecondmicrosecondquarter
get_formatextractmakedateperiod_addtimestampaddperiod_di
utc_timeutc_timestampmaketimecurtime
示例:
gaussdb=# select day(null);
day
-----
(1 row)
纯数字入参个别函数与MySQL有差异,不带引号的数字入参统一转成text入参来
处理。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 388
示例:
gaussdb=# select day(19231221.123141);
WARNING: Incorrect datetime value: "19231221.123141"
CONTEXT: referenced column: day
day
-----
(1 row)
时间日期运算函数:adddatesubdatedate_adddate_sub。当运算后的结果
为日期时,支持的范围为[0000-01-01, 9999-12-31];当运算后的结果为日期时
间时,支持的范围为[0000-01-01 00:00:00.000000, 9999-12-31
23:59:59.999999];当运算后的结果超过支持的范围时,在严格模式下报error
在宽松模式下报warning。另外,当运算后的日期结果在范围[0000-01-01,
0001-01-01]中时,GaussDB正常返回结果,MySQL返回'0000-00-00'
示例:
gaussdb=# select subdate('0000-01-01', interval 1 hour);
ERROR: Datetime function: datetime eld overow
CONTEXT: referenced column: subdate
gaussdb=# select subdate('0001-01-01', interval 1 day);
subdate
-------------
0000-12-31
(1 row)
对于日期和时间函数的datedatetime类型入参,含有0月或0日时为非法值,在
严格模式下报error;在宽松模式,当输入为字符串或数字时,报warning,输入
datedatetime类型时视为上一年12月或上一月最后一日处理。
对于cast函数,转换为datedatetime时,严格模式下会报error。宽松模式下不
会报warning,而是视为上一年12月或上一月最后一日处理,需要注意此区别。
MySQL对于包含0年、0月或0日的情况会原样输出。
示例:
gaussdb=# select adddate('2023-01-00', 1);-- 严格模式
ERROR: Incorrect datetime value: "2023-01-00"
CONTEXT: referenced column: adddate
gaussdb=# select adddate('2023-01-00', 1);-- 宽松模式
WARNING: Incorrect datetime value: "2023-01-00"
CONTEXT: referenced column: adddate
adddate
---------
(1 row)
gaussdb=# select adddate(date'2023-00-00', 1);-- 宽松模式
adddate
------------
2022-12-01
(1 row)
gaussdb=# select cast('2023/00/00' as date);-- 宽松模式
date
------------
2022-11-30
(1 row)
gaussdb=# select cast('0000-00-00' as datetime);-- 宽松模式
timestamp
---------------------
0000-00-00 00:00:00
(1 row)
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 389
若函数入参为numeric数据类型,在非法输入的情况下不会产生报错,会把入参当
0值处理。
示例:
gaussdb=# select from_unixtime('aa');
from_unixtime
---------------------
1970-01-01 08:00:00
(1 row)
最多保留6位小数,不保留后置都为0的小数。
示例:
gaussdb=# select from_unixtime('1234567899.00000');
from_unixtime
---------------------
2009-02-14 07:31:39
(1 row)
时间函数参数为字符串时,只保证年月日之间使用“-”分隔,时分秒之间使用
:”分隔时结果正确。
示例:
gaussdb=# select adddate('20-12-12',interval 1 day);
adddate
------------
2020-12-13
(1 row)
MySQL中,当函数的返回值为varchar时,在GaussDB中,函数对应的返回值为
text
-- GaussDB中函数的返回值。
gaussdb=# SELECT pg_typeof(adddate('2023-01-01', 1));
pg_typeof
-----------
text
(1 row)
-- MySQL中函数的返回值。
mysql> CREATE VIEW v1 AS SELECT adddate('2023-01-01', 1);
Query OK, 0 rows aected (0.00 sec)
mysql> DESC v1;
+--------------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------------+-------------+------+-----+---------+-------+
| adddate('2023-01-01', 1) | varchar(29) | YES | | NULL | |
+--------------------------+-------------+------+-----+---------+-------+
1 row in set (0.00 sec)
8-32 日期与和时间函数列表
MySQL数据库 GaussDB
据库
差异
1 ADDDATE() 支持 此函数的表现会因为interval表达式的
差异与MySQL有差异,具体可见
INTERVAL差异说明
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 390
MySQL数据库 GaussDB
据库
差异
2 ADDTIME() 支持
MySQL对第二入参为DATETIME
式字符串返回NULLGaussDB
以计算。
入参取值范围为['0001-01-01
00:00:00', 9999-12-31
23:59:59.999999]
MySQLADDTIME函数如果第一
个参数是动态参数(例如在预准备
语句中),则返回类型为TIME
否则,函数的解析类型派生自第一
个参数的解析类型。GaussDB
ADDTIME函数的返回值规则如
下:
第一个入参为date,第二个入
参为date,返回值为time
第一个入参为date,第二个入
参为text,返回值为text
第一个入参为date,第二个入
参为datetime,返回值为
time
第一个入参为date,第二个入
参为time,返回值为time
第一个入参为text,第二个入参
date,返回值为text
第一个入参为text,第二个入参
text,返回值为text
第一个入参为text,第二个入参
datetime,返回值为text
第一个入参为text,第二个入参
time,返回值为text
第一个入参为datetime,第二
个入参为date,返回值为
datetime
第一个入参为datetime,第二
个入参为text,返回值为text
第一个入参为datetime,第二
个入参为datetime,返回值为
datetime
第一个入参为datetime,第二
个入参为time,返回值为
datetime
第一个入参为time,第二个入
参为date,返回值为time
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 391
MySQL数据库 GaussDB
据库
差异
第一个入参为time,第二个入
参为text,返回值为text
第一个入参为time,第二个入
参为datetime,返回值为
time
第一个入参为time,第二个入
参为time,返回值为time
3 CONVERT_TZ() 支持 -
4 CURDATE() 支持 -
5 CURRENT_DATE()
CURRENT_DATE
支持 -
6 CURRENT_TIME()
CURRENT_TIME
支持 GaussDB的按精度输出的时间值(小
数点后的值)是四舍五入的;MySQL
是直接截断的。GaussDB按精度输出
的时间值(小数点后的值)末尾0
不显示;MySQL会显示。GaussDB
支持输入[0,6]范围内的整型值,作为
返回时间的精度,其他均报错;
MySQL的精度值有效值是[0,6],但是
输入的整型值内部会对256求余(例
257,会返回精度1的时间值)。
7 CURRENT_TIMESTAM
P()
CURRENT_TIMESTAMP
支持
GaussDB的按精度输出的时间值(小
数点后的值)是四舍五入的;MySQL
是直接截断的。GaussDB按精度输出
的时间值(小数点后的值)末尾0
不显示;MySQL会显示。GaussDB
支持输入[0,6]范围内的整型值,作为
返回时间的精度,超过6的整型值,
会告警并按照精度6输出时间值;
MySQL的精度值有效值是[0,6],但是
输入的整型值内部会对256求余(例
257,会返回精度1的时间值)。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 392
MySQL数据库 GaussDB
据库
差异
8 CURTIME() 支持 GaussDB此函数输入字符串或者非整
型值,会被隐式转成整型,然后再校
验精度,[0,6]范围之外的会报错,范
围之内会正常输出时间值;MySQL
接报错。GaussDB的按精度输出的时
间值(小数点后的值)是四舍五入
的;MySQL是直接截断的。GaussDB
按精度输出的时间值(小数点后的
值)末尾0都不显示;MySQL会显
示,GaussDB只支持输入[0,6]范围内
的整型值,作为返回时间的精度,其
他均报错;MySQL的精度值有效值是
[0,6],但是输入的整型值内部会对
256求余(例257,会返回精度1的时
间值)。
9 YEARWEEK() 支持 -
10 DATE_ADD() 支持 此函数的表现会因为interval表达式的
差异与MySQL有差异,具体可见
INTERVAL差异说明
11
DATE_FORMAT() 支持 -
12 DATE_SUB() 支持 此函数的表现会因为interval表达式的
差异与MySQL有差异,具体可见
INTERVAL差异说明
13
DATEDIFF() 支持 -
14 DAY() 支持 -
15 DAYNAME() 支持 -
16 DAYOFMONTH() 支持 -
17 DAYOFWEEK() 支持 -
18 DAYOFYEAR() 支持 -
19 EXTRACT() 支持 -
20 FROM_DAYS() 支持 -
21 FROM_UNIXTIME() 支持 -
22 GET_FORMAT() 支持 -
23 HOUR() 支持 -
24 LAST_DAY 支持 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 393
MySQL数据库 GaussDB
据库
差异
25 LOCALTIME()
LOCALTIME
支持 GaussDB的按精度输出的时间值(小
数点后的值)是四舍五入的;MySQL
是直接截断的。GaussDB按精度输出
的时间值(小数点后的值)末尾0
不显示;MySQL会显示。GaussDB
支持输入[0,6]范围内的整型值,作为
返回时间的精度,其他整型值直接报
错;MySQL的精度值有效值是[0,6]
但是输入的整型值内部会对256求余
(例257,会返回精度1的时间值)。
26 LOCALTIMESTAMP
LOCALTIMESTAMP()
支持 GaussDB的按精度输出的时间值(小
数点后的值)是四舍五入的;MySQL
是直接截断的。GaussDB按精度输出
的时间值(小数点后的值)末尾0
不显示;MySQL会显示。GaussDB
支持输入[0,6]范围内的整型值,作为
返回时间的精度,超过6的整型值,
会告警并按照精度6输出时间值;
MySQL的精度值有效值是[0,6],但是
输入的整型值内部会对256求余(例
257,会返回精度1的时间值)。
27 MAKEDATE() 支持 -
28 MAKETIME() 支持 MySQL相比, 入参为NULL时,
GaussDB不支持maketime函数自嵌
套,MySQL支持。
29
MICROSECOND() 支持 -
30 MINUTE() 支持 -
31 MONTH() 支持 -
32 MONTHNAME() 支持 -
33 NOW() 支持 GaussDB的按精度输出的时间值(小
数点后的值)是四舍五入的;MySQL
是直接截断的。GaussDB按精度输出
的时间值(小数点后的值)末尾0
不显示;MySQL会显示。GaussDB
支持输入[0,6]范围内的整型值,作为
返回时间的精度,超过6的整型值,
会告警并按照精度6输出时间值;
MySQL的精度值有效值是[0,6],但是
输入的整型值内部会对256求余(例
257,会返回精度1的时间值)。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 394
MySQL数据库 GaussDB
据库
差异
34 PERIOD_ADD() 支持 当入参period或结果小于0时,
GaussDB参考MySQL8.0.x版本的表
现,报错处理。MySQL5.7会发生整
数回绕,导致计算结果异常。
35
PERIOD_DIFF() 支持 当入参或结果小于0时,GaussDB
MySQL8.0.x版本的表现,报错处
理。MySQL5.7会发生整数回绕,导
致计算结果异常。
36
QUARTER() 支持 -
37 SEC_TO_TIME() 支持 -
38 SECOND() 支持 -
39 STR_TO_DATE() 支持 返回值与MySQL有差异,GaussDB
回的是textMySQL返回的是
datetimedate
40
SUBDATE() 支持 此函数的表现会因为interval表达式的
差异与MySQL有差异,具体可见
INTERVAL差异说明
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 395
MySQL数据库 GaussDB
据库
差异
41 SUBTIME() 支持
MySQL对第二入参为DATETIME
式字符串返回NULLGaussDB
以计算
入参取值范围为['0001-01-01
00:00:00', 9999-12-31
23:59:59.999999]
MySQLSUBTIME函数如果第一
个参数是动态参数(例如在预准备
语句中),则返回类型为 TIME
否则,函数的解析类型派生自第一
个参数的解析类型。GaussDB
SUBTIME函数的返回值规则如
下:
第一个入参为date,第二个入
参为date,返回值为time
第一个入参为date,第二个入
参为text,返回值为text
第一个入参为date,第二个入
参为datetime,返回值为
time
第一个入参为date,第二个入
参为time,返回值为time
第一个入参为text,第二个入参
date,返回值为text
第一个入参为text,第二个入参
text,返回值为text
第一个入参为text,第二个入参
datetime,返回值为text
第一个入参为text,第二个入参
time,返回值为text
第一个入参为datetime,第二
个入参为date,返回值为
datetime
第一个入参为datetime,第二
个入参为text,返回值为text
第一个入参为datetime,第二
个入参为datetime,返回值为
datetime
第一个入参为datetime,第二
个入参为time,返回值为
datetime
第一个入参为time,第二个入
参为date,返回值为time
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 396
MySQL数据库 GaussDB
据库
差异
第一个入参为time,第二个入
参为text,返回值为text
第一个入参为time,第二个入
参为datetime,返回值为
time
第一个入参为time,第二个入
参为time,返回值为time
42 SYSDATE() 支持 MySQL入参整型值会按照一字节最大
255整数回绕,GaussDB不回绕。
43 YEAR() 支持 -
44 TIME_FORMAT() 支持 -
45 TIME_TO_SEC() 支持 -
46 TIMEDIFF() 支持 -
47 WEEKOFYEAR() 支持 -
48 TIMESTAMPADD() 支持 -
49 TIMESTAMPDIFF() 支持 -
50 TO_DAYS() 支持 -
51 TO_SECONDS() 支持 -
52 UNIX_TIMESTAMP() 支持 返回值与MySQL有差异,GaussDB
回的是numericMySQL返回的是
int
53
UTC_DATE() 支持 MySQL支持无括号调用,GaussDB
支持。MySQL入参整型值会按照一字
节最大值255整数回绕。
MySQL入参只支持0-6整数,
GaussDB支持可以隐式转为0-6的输
入。
54 UTC_TIME() 支持
55 UTC_TIMESTAMP() 支持
56 WEEK() 支持 -
57 WEEKDAY() 支持 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 397
8.2.2.3.3 字符串函数
8-33 字符串函数列表
序号
MySQL数据库 GaussDB数据库 差异
1 BIN() 支持 函数入参1支持类型存在差异,
GaussDB入参1支持类型如下:
整数类型:tinyintsmallint
mediumintintbigint
无符号整数类型:tinyint
unsignedsmallint
unsignedint unsigned
bigint unsigned
字符和文本类型:char
varchartinytexttext
mediumtextlongtext,仅支
持纯数字整数字符串,且整数
范围在bigint范围内。
浮点类型:oatreal
double
定点类型:numeric
decimaldec
布尔类型:bool
2 CONCAT() 支持 无论参数的数据类型如何,concat
返回值的数据类型始终为text
MySQLconcat在含有二进制类
型参数时,返回值为二进制类型。
3
CONCAT_WS() 支持 无论参数的数据类型如何,
concat_ws返回值的数据类型始终
textMySQLconcat_ws在含
有二进制类型参数时,返回值为二
进制类型,其他情况返回值为字符
串类型。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 398
序号 MySQL数据库 GaussDB数据库 差异
4 ELT( 支持 1. 函数入参1支持类型存在差异,
GaussDB入参1支持类型如下:
整数类型:tinyint
smallintmediumint
intbigint
无符号整数类型:tinyint
unsignedsmallint
unsignedint unsigned
字符和文本类型:char
varchartinytexttext
mediumtextlongtext,仅
支持纯数字整数字符串,且
整数范围在bigint范围内。
浮点类型:oatreal
double
定点类型:numeric
decimaldec
布尔类型:bool
2. 函数入参2支持类型存在差异,
GaussDB入参2支持类型如下:
整数类型:tinyint
smallintmediumint
intbigint
无符号整数类型:tinyint
unsignedsmallint
unsignedint unsigned
bigint unsigned
字符和文本类型:char
varchartinytexttext
mediumtextlongtext
浮点类型:oatreal
double
定点类型:numeric
decimaldec
布尔类型:bool
大对象类型:tinyblob
blobmediumblob
longblob
日期类型:datetime
timestampdatetime
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 399
序号 MySQL数据库 GaussDB数据库 差异
5 FIELD() 支持 函数入参为在bigint最大值~ bigint
unsigned最大值范围内的数字,存
在不兼容。
函数入参为浮点型oat(m, d)
double(m, d)real(m, d)时精度
更高,存在不兼容。
6 FIND_IN_SET() 支持 当数据库encoding = 'SQL_ASCII'
时,不支持默认的大小写判断规
则,即在用户不指定字符集规则的
情况下,大写与小写区分判断。
7
INSERT() 支持
Int64类型传参有范围限制,一
旦超
-9223372036854775808~92
23372036854775807范围会直
接报错,MySQL对数值类型传
参范围无限制,异常会告警按
照上限或下限数值处理。
字符串传参有限制,入参text
型字符串长度最大为2^30-5
节,入参bytea类型字符串长度
最大为2^30-512字节。
s1s2任意参数为bytea类型
时,涉及到结果出现非法字符
的情况可能展示结果与MySQL
有差异但是字符编码与MySQL
是一致的。
8 LOCATE() 支持 入参1bytea类型,入参2text
类型时,GaussDBMySQL行为
存在差异。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 400
序号 MySQL数据库 GaussDB数据库 差异
9 MAKE_SET() 支持
bits参数为整型时,最大范围支
持到int128,低于MySQL
围。
bits参数为日期类型datetime
timestampdatetime,由
于时间类型转整型与MySQL
在差异,目前均未做支持。
bit类型或bool类型由于此类数
据类型GaussMySQL存在差
异,返回结果导致的差异为
GaussDBMySQL固有差异。
bits入参为bool类型,str入参为
bit类型与bool类型均不做支
持。
bits入参为字符串或文本类型
时,仅支持纯整型数字形式,
其他形式存在差异。且纯整型
数字范围限制在bigint范围。
str入参整型数值超过正负81
9,返回值与MySQL有差异。
str入参当以科学计数法表示
时,GaussDB末尾0值会显示,
MySQL不显示,以科学计数法
打印,此为固有差异。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 401
序号 MySQL数据库 GaussDB数据库 差异
10 QUOTE() 支持
已知str字符串中含有“\Z”,
\r”,“\%”,“\_”,
GaussDB未进行转义,与
MySQL存在差异。斜线后跟部
分数字也会引起差异,如
\563”。由转义字符引起的
本函数与MySQL的差异,此为
GaussDBMySQL的转义字符
差异。
str字符串中的“\b”,输出结
果表现形式与MySQL有差异。
此为GaussDBMySQL的固有
差异
str字符串中含有“\0”时,
GaussDB由于UTF-8字符集不识
别该字符,输入不成功。此为
GaussDBMySQL的固有差异
strbitbool类型时,由于
GaussDBMySQL此类型目前
有差异,暂不支持此类类型。
Gauss最大支持1GB数据传输,
str入参长度最大支持
536870908,函数返回结果字
符串最大支持1GB
str入参整型数值超过正负81
9,返回值与MySQL有差异。
str入参当以科学计数法表示
时,GaussDB末尾0值会显示,
MySQL不显示,以科学计数法
打印,此为固有差异。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 402
序号 MySQL数据库 GaussDB数据库 差异
11 SPACE() 支持 GaussDB入参1最大支持
1073741818,超出返回空字符
串。MySQL的入参1默认最大支持
4194304,超出告警。
函数入参1支持类型存在差异,
GaussDB入参1支持类型如下:
整数类型:tinyintsmallint
mediumintintbigint
无符号整数类型:tinyint
unsignedsmallint
unsignedint unsigned
字符和文本类型:char
varchartinytexttext
mediumtextlongtext,仅支
持纯数字整数字符串,且整数
范围在bigint范围内。
浮点类型:oatreal
double
定点类型:numeric
decimaldec
布尔类型:bool
12
SUBSTR() 支持 -
13 SUBSTRING() 支持 -
14 SUBSTRING_IN
DEX()
支持 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 403
序号 MySQL数据库 GaussDB数据库 差异
15 STRCMP() 支持 1. 支持入参类型与M存在差异,
GaussDB支持类型如下:
字符类型:CHAR
VARCHARNVARCHAR2
TEXT
二进制类型:BYTEA
数值类型:TINYING
[UNSIGNED]SMALLINT
[UNSIGNED]INTEGER
[UNSIGNED]BIGINT
[UNSIGNED]FLOAT4
FLOAT8NUMERIC
日期时间类型:DATE
TIME WITHOUT TIME
ZONEDATETIME
TIMESTAMPTZ
2. 对于数值类型中的浮点类型,
由于连接参数设置不同,精度
可能与M有差异,不建议使用
该场景,或使用NUMERIC类型
代替。
16
SHA() /
SHA1()
支持 -
17 SHA2() 支持 -
8.2.2.3.4 强制转换函数
8-34 强制转换函数列表
序号
MySQL数据库 GaussDB数据库 差异
1 CAST() 支持 数据类型转换规
则和支持的转换
类型均以
GaussDB支持的
转换范围和规则
为准。
2
CONVERT() 支持 数据类型转换规
则和支持的转换
类型均以
GaussDB支持的
转换范围和规则
为准。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 404
8.2.2.3.5 加密函数
8-35 加密函数列表
序号
MySQL数据库 GaussDB数据库 差异
1 AES_DECRYPT() 支持 -
2 AES_ENCRYPT() 支持 -
8.2.2.3.6 信息函数
8-36 信息函数列表
序号 MySQ数据库 GaussDB数据库 差异
1 LAST_INSERT_ID() 支持 -
8.2.2.3.7 JSON 函数
json函数差异说明:
1. 对于json函数和其他字符入参函数来说,如果含有转义字符的输入,默认情况下会与MySQL
有一定差异,需要设置GUC参数set standard_conforming_strings= o;的情况下,对于转义
字符的场景才会与MySQL兼容,但是会产生非标准字符输入的warning告警,在转义字符中
\t\u与转义数字与MySQL有差异。JSON_UNQUOTE()函数该场景下已做兼容,不设置
GUC参数时,仍与MySQL兼容,且不会报警。
2. 在处理超长数字(数字的字符长度超过64)时,GaussDBjson函数会将数字解析为一个
double处理,并使用科学计数法计数。和MySQL的非json类型入参相同。但是在json类型入
参时,由于json类型未完全与MySQL兼容,此场景下会产生差异。MySQL会完整显示数字
(并且当数字长度超过82时,MySQL会给出错误的结果。),GaussDB依然将超长数字解析
为一个double精度的值。考虑到超长数字内部都是使用浮点数进行储存,进行运算时无论
GaussDB还是MySQL都会有精度丢失,建议您使用字符串来储存超长数字。
gaussdb=# select json_insert('[1, 4,
99999999999999999999999999999999999999999999999999999999999999999999999999]','$[6]',j
son_insert('[1,4]','$[5]',99999999999999999999999999999999999999999999999999999999999999
999999999999));
json_insert
------------------------------
[1, 4, 1e+74, [1, 4, 1e+74]]
(1 row)
8-37 JSON 函数列表
MySQL数据库 GaussDB数据库 差异
1 JSON_APPEND() 支持 -
2 JSON_ARRAY() 支持 -
3 JSON_ARRAY_APPEND() 支持 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 405
MySQL数据库 GaussDB数据库 差异
4 JSON_ARRAY_INSERT() 支持 -
5 JSON_CONTAINS() 支持 -
6 JSON_CONTAINS_PATH() 支持 -
7 JSON_DEPTH() 支持 返回值与
MySQL有差
异,GaussDB
返回的是int
MySQL返回的
bigint
8
JSON_EXTRACT() 支持 -
9 JSON_INSERT() 支持 -
10 JSON_KEYS() 支持 -
11 JSON_LENGTH() 支持 返回值与
MySQL有差
异,GaussDB
返回的是int
MySQL返回的
bigint
12
JSON_MERGE() 支持 -
13 JSON_OBJECT() 支持 -
14 JSON_QUOTE() 支持 返回值与
MySQL有差
异,GaussDB
返回的是
jsonMySQL
返回的是
varchar或者
text
15 JSON_REMOVE() 支持 -
16 JSON_REPLACE() 支持 -
17 JSON_SEARCH() 支持 返回值与
MySQL有差
异,GaussDB
返回的是
textMySQL
返回的是
json
18 JSON_SET() 支持 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 406
MySQL数据库 GaussDB数据库 差异
19 JSON_TYPE() 支持 数值类型的
json值统一识
别为
number,与
MySQL有差
异。
20
JSON_UNQUOTE() 支持 -
21 JSON_VALID() 支持 -
8.2.2.3.8 聚合函数
8-38 聚合函数列表
MySQL数据库 GaussDB数据库 差异
1 GROUP_CONCAT() 支持 group_concat参数中同时有
DISTINCTORDER BY语法时,所
ORDER BY后的表达式必须也在
DISTINCT的表达式之中。
group_concat(... order by 数字)
不代表按照第几个参数的顺序,数
字只是一个常量表达式,相当于不
排序。
无论参数的数据类型如何,
group_concat返回值的数据类型始
终为textMySQLgroup_concat
在含有二进制类型参数时,返回值
为二进制类型,其他情况返回值为
字符串类型,并且返回值长度大于
512时,其数据类型为字符串大对
象或二进制大对象。
GUC参数group_concat_max_len
有效范围是0-1073741823,最大
值比MySQL小。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 407
MySQL数据库 GaussDB数据库 差异
2 DEFAULT() 支持
字段默认值为数组形式,
GaussDB返回数组形式,
MySQL不支持数组类型。
GaussDB字段是隐藏列(比如
xmincmin),default函数返
回空值。
GaussDB支持分区表、临时
表、多表连接查询默认值。
GaussDB支持查询列名包含字
符串值节点(表示名称)和
A_Star节点(表示出现
*”),如default(tt.t4.id)
default(tt.t4.*)。不合法的查询
列名和A_Star节点,GaussDB
MySQL报错信息有差异。
GaussDB创建字段默认值,没
有检验字段类型的范围,使用
default函数可能报错。
字段的默认值是函数表达式
时,GaussDBdefault函数返
回建表时字段的default表达式
的计算值。MySQLdefault
数返回NULL
8.2.2.3.9 数字操作函数
8-39 数字操作函数列表
序号
MySQ
L数据
Gauss
DB数据
差异
1 log2() 支持
小数位显示与MySQL存在差异,受GaussDB浮点数据
类型限制,可通过参数extra_oat_digits控制小数位
个数显示;
由于输入精度内部处理差异,GaussDBMySQL会存
在结果计算差异;
支持数据类型有:bigintint16intsmallint
tinyint整数类型;bigint unsignedinteger
unsignedsmallint unsignedtinyint unsigned
符号整数类型:numericreal浮点数类型;
charactercharacter varyingclobtext字符串类
型,仅支持纯数字整数字符串;set类型;NULL空类
型。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 408
序号 MySQ
L数据
Gauss
DB数据
差异
2 log10(
)
支持
小数位显示与MySQL存在差异,受GaussDB浮点数据
类型限制,可通过参数extra_oat_digits控制小数位
个数显示;
由于输入精度内部处理差异,GaussDBMySQL会存
在结果计算差异;
支持数据类型有:bigintint16intsmallint
tinyint整数类型;bigint unsignedinteger
unsignedsmallint unsignedtinyint unsigned
符号整数类型:numericreal浮点数类型;
charactercharacter varyingclobtext字符串类
型,仅支持纯数字整数字符串;set类型;NULL空类
型。
8.2.2.3.10 其他函数
8-40 其他函数列表
序号
MySQL数据库 GaussDB数据库 差异
1 UUID() 支持 -
2 UUID_SHORT() 支持 -
8.2.2.4 操作符
GaussDB数据库兼容绝大多数MySQL的操作符,但存在部分差异。如未列出,操作符
行为默认为GaussDB原生行为。
8-41 操作符
序号
MySQL数据库 GaussDB数据库 差异
1 安全等于(<=> 支持 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 409
序号 MySQL数据库 GaussDB数据库 差异
2 [NOT] REGEXP 支持
当开启
b_format_dev_version='s2'
时,模式字符串pattern 中有'\
\a', '\\d', '\\e', '\\n', '\\Z', '\\u'
等转义字符时,匹配源字符串
'\a', '\d', '\e', '\n', '\Z', '\u'时,
GaussDB行为与MySQL5.7
一致。MySQL5.7存在bug
MySQL后续版本已经修复与
GaussDB一致。
当开启
b_format_dev_version='s2'
时,GaussDB '\b' 可以与'\\b'
匹配,MySQL匹配失败
模式字符串pat非法入参,只
存在右单括号’)’时,
GaussDB数据库报错。MySQL
存在bug,后续版本已经修复
此问题。
de|abc匹配序列deabc
匹配规则,当|左右存在空值
时,MySQL存在bug,会报
错,后续版本已经修复此问
题。
空白字符[\t]正则匹配字符类
[:blank:]GaussDB可匹配,
MySQL\t不能匹配[:blank:]
MySQL存在bug,后续版本已
经修复此问题。
GaussDB支持非贪婪模式匹
配,即尽可能少的匹配字符,
在部分特殊字符后加‘?’问
号字符,例如:“??, *?, +?,
{n}?, {n,}?, {n,m}?”。MySQL
5.7版本不支持非贪婪模式匹
配,并报错:Got error
'repetition-operator operand
invalid' from regexpMySQL
8.0版本已经支持。
binary字符集下,text
型、blob类型均会转换成
bytea类型,由于REGEXP操作
符不支持bytea类型,因此无
法匹配。
3
[NOT] RLIKE 支持 [NOT] REGEXP
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 410
8.2.2.5 字符集
GaussDB数据库支持指定数据库、模式、表或列的字符集,支持的范围如下。
8-42 字符集列表
序号
MySQL数据库 GaussDB数据库
1 utf8mb4 支持
2 gbk 支持
3 gb18030 支持
4 utf8 支持
5 binary 支持
8.2.2.6 排序规则
GaussDB数据库支持指定库、模式、表或列的排序规则,支持的范围如下。
排序规则差异说明:
当前仅有字符串类型、部分二进制类型支持指定排序规则,其他类型不支持指定排序规则,
可以通过查询pg_type系统表中类型的typcollation属性不为0来判断该类型支持字符序。
MySQL中所有类型可以指定字符序,但除字符串、二进制类型其他排序规则无实际意义。
当前排序规则(除binary外)仅支持在其对应字符集与库级字符集一致时可以指定,
GaussDB数据库中,字符集必须与数据库的字符集一致,且不支持表内多种字符集混合使
用。
utf8mb4字符集下默认字符序为utf8mb4_general_ci,与MySQL5.7保持一致。
GaussDButf8utf8mb4为同一个字符集。
8-43 排序规则列表
序号
MySQL数据库 GaussDB数据库
1 utf8mb4_general_ci 支持
2 utf8mb4_unicode_ci 支持
3 utf8mb4_bin 支持
4 gbk_chinese_ci 支持
5 gbk_bin 支持
6 gb18030_chinese_ci 支持
7 gb18030_bin 支持
8 binary 支持
9 utf8mb4_0900_ai_ci 支持
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 411
序号 MySQL数据库 GaussDB数据库
10 utf8_general_ci 支持
11 utf8_bin 支持
8.2.2.7 表达式
GaussDB数据库兼容绝大多数MySQL的表达式,但存在部分差异。如未列出,表达式
行为默认为GaussDB原生行为。
8-44 表达式
序号 MySQL数据库 GaussDB数据库
1 用户自定义变量@var_name 部分支持
2 全局变量@@var_name 部分支持
8.2.2.8 SQL
GaussDB数据库兼容绝大多数MySQL语法,但存在部分差异。本章节介绍GaussDB
据库当前支持的MySQL语法。
8.2.2.8.1 DDL
序号
MySQL数据库功能
概述
详细语法说明 GaussDB数据库实现差异
1 建表和修改表时支
持创建主键、
UNIQUE索引、外
键约束
ALTER TABLE
CREATE TABLE
GaussDB当前不支持
UNIQUE INDEX|KEY
index_name语法,使
UNIQUE INDEX|KEY
index_name语法时会
报错。
当约束被建立为全局二
级索引,SQL语句中指
using btree时,底层
会建立为ubtree
当约束关联的表为
ustore,且SQL语句中
指定为using btree时,
底层会建立为ubtree
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 412
序号 MySQL数据库功能
概述
详细语法说明 GaussDB数据库实现差异
2 支持自增列 ALTER TABLE
CREATE TABLE
自动增长列建议为索引
(非全局二级索引)的
第一个字段,否则建表
时产生警告,含有自动
增长列的表进行某些操
作时会产生错误,例
如:ALTERT TABLE
EXCHANGE
PARTITIONMySQL
动增长列必须为索引第
一个字段。
AUTO_INCREMENT =
value语法,value必须
为小于2^127的正数。
MySQL不校验value
当自增值已经达到字段
数据类型的最大值时,
继续自增将产生错误。
MySQL有些场景产生错
误或警告,有些场景仍
自增为最大值。
不支持
innodb_autoinc_lock_
mode系统变量,
GaussDBGUC参数
auto_increment_cache
=0时,批量插入自动增
长列的行为与MySQL
统变量
innodb_autoinc_lock_
mode=1相似。
自动增长列在导入数据
或者进行Batch Insert
执行计划的插入操作
时,对于混合0NULL
和确定值的场景,如果
产生错误,后续插入自
增值不一定与MySQL
全一致。
提供
auto_increment_ca
che参数,可以控制
预留自增值的数
量。
并行导入或插入自动增
长列触发自增时,每个
并行线程预留的缓存值
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 413
序号 MySQL数据库功能
概述
详细语法说明 GaussDB数据库实现差异
也只在其线程中使用,
未完全使用完毕的话,
也会出现表中自动增长
列的值不连续的情况。
并行插入产生的自增值
结果无法保证与MySQL
完全一致。
本地临时表中的自动增
长列批量插入时不会预
留自增值,正常场景不
会产生不连续的自增
值。MySQL临时表与普
通表中的自动增长列自
增结果一致。
SERIAL数据类型为原有
的自增列,与
AUTO_INCREMENT
增列有差异。MySQL
SERIAL数据类型就是
AUTO_INCREMENT
增列。
不允许
auto_increment_oset
的值大于
auto_increment_incre
ment的值,会产生错
误。MySQL允许,并说
auto_increment_oset
会被忽略。
在表有主键或索引的情
况下,ALTER TABLE
令重写表数据的顺序与
MySQL不一定相同,
GaussDB按照表数据存
储顺序重写,MySQL
按主键或索引顺序重
写,导致自增值的顺序
可能不同。
ALTER TABLE命令添加
或修改自增列时,第一
次预留自增值的数量是
表统计信息中的行数,
统计信息的行数不一定
MySQL一致。
last_insert_id函数返回
值为128位的整型。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 414
序号 MySQL数据库功能
概述
详细语法说明 GaussDB数据库实现差异
在触发器或用户自定义
函数中自增时,刷新
last_insert_id返回值。
MySQL不刷新。
GUC参数
auto_increment_oset
auto_increment_incre
ment设置超出范围的
值会产生错误。MySQL
会自动改为边界值。
3 支持前缀索引 CREATE INDEX
ALTER TABLE
CREATE TABLE
前缀长度不得超过
2676,键值的实际长度
受内部页面限制,若字
段中含有多字节字符或
者一个索引上有多个
键,索引行长度可能会
超限报错。
CREATE INDEX语法
中,不支持以下关键字
作为前缀键的字段名
称:COALESCE
EXTRACT
GREATESTLEAST
LNNVLNULLIF
NVLNVL2
OVERLAY
POSITION
REGEXP_LIKE
SUBSTRING
TIMESTAMPDIFF
TREATTRIM
XMLCONCAT
XMLELEMENT
XMLEXISTS
XMLFOREST
XMLPARSEXMLPI
XMLROOT
XMLSERIALIZE
主键索引中不支持前缀
键。
4
支持指定字符集与
排序规则
ALTER SCHEMA
ALTER TABLE
CREATE SCHEMA
CREATE TABLE
-
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 415
序号 MySQL数据库功能
概述
详细语法说明 GaussDB数据库实现差异
5 修改表时支持在表
第一列前面或者在
指定列后面添加列
ALTER TABLE
-
6 修改列名称/定义语
法兼容
ALTER TABLE -
7 定时任务EVENT
法兼容
ALTER EVENT
CREATE EVENT
DROP EVENT
SHOW EVENTS
-
8 创建分区表语法兼
CREATE TABLE
PARTITIONCREATE
TABLE SUBPARTITION
-
9 建表和修改表时支
持指定表级和列级
comment
CREATE TABLE
ALTER TABLE
-
10 创建索引时支持指
定索引级comment
CREATE INDEX -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 416
序号 MySQL数据库功能
概述
详细语法说明 GaussDB数据库实现差异
11 交换普通表和分区
表分区的数据
ALTER TABLE
PARTITION
ALTER TABLE EXCHANGE
PARTITION的差异点:
对于自增列,MySQL
alter exchange
partition后,自增列会
被重置;GaussDB
不会被重置,自增列则
按照旧的自增值递增。
MySQL表或分区使用
tablespace时,则无法
进行分区和普通表数据
的交换;GaussDB表或
分区使用不同的
tablespace时,仍可进
行分区和普通表数据的
交换。
对于列默认值,MySQL
不会校验默认值,因此
默认值不同时也可进行
分区和普通表数据的交
换;GaussDB会校验默
认值,如果默认值不
同,则无法进行分区和
普通表数据的交换。
MySQL在分区表或普通
表上进行DROP列操作
后,表结构仍然一致,
则可进行分区和普通表
数据的交换;GaussDB
需要保证普通表和分区
表的被删除列严格对齐
才能进行分区和普通表
数据的交换。
MySQLGaussDB的哈
希算法不同,所以两者
在相同的hash分区存储
的数据可能不一致,导
致最后交换的数据也可
能不一致。
MySQL的分区表不支持
外键,普通表包含外键
或其他表引用普通表的
外键,则无法进行分区
和普通表数据的交换;
GaussDB的分区表支持
外键,在两个表的外键
约束一致时,则可进行
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 417
序号 MySQL数据库功能
概述
详细语法说明 GaussDB数据库实现差异
分区和普通表数据的交
换,GaussDB的分区表
不带外键,普通表有其
他表引用,如果分区表
和普通表表一致,则可
进行分区和普通表数据
的交换。
12 支持删除表的主键
外键约束
ALTER TABLE DROP
[PRIMARY |
FOREIGN]KEY
-
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 418
序号 MySQL数据库功能
概述
详细语法说明 GaussDB数据库实现差异
13 支持CREATE
TABLE ... LIKE语法
兼容
CREATE TABLE ... LIKE
MySQL 8.0.16 之前
的版本中,CHECK约束
会被语法解析但功能会
被忽略,表现为不复制
CHECK约束,GaussDB
支持复制CHECK约束。
对于主键约束名称,在
建表时,MySQL所有主
键约束名称固定为
PRIMARY KEY
GaussDB不支持复制。
对于唯一键约束名称,
在建表时,MySQL支持
复制,GaussDB不支持
复制。
对于CHECK约束名称,
在建表时,MySQL
8.0.16 之前的版本无
CHECK约束信息,
GaussDB支持复制。
对于索引名称,在建表
时,MySQL支持复制,
GaussDB不支持复制。
在跨sql_mode模式建
表时,MySQL受宽松模
式和严格模式控制,
GaussDB可能存在严格
模式失效的情况。
例如:源表存在默认值
0000-00-00”,在
no_zero_date”严格
模式下,GaussDB建表
成功,且包含默认值
0000-00-00”,严格
模式失效;而MySQL
表失败,受严格模式控
制。
针对跨数据库创建表,
MySQL支持,GaussDB
不支持。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 419
序号 MySQL数据库功能
概述
详细语法说明 GaussDB数据库实现差异
14 支持更改表名兼容
语法
ALTER TABLE
tbl_name RENAME
[TO | AS | =]
new_tbl_name;
RENAME {TABLE |
TABLES} tbl_name TO
new_tbl_name [,
tbl_name2 TO
new_tbl_name2, ...];
GaussDBalter
rename语法仅支持修
改表名称功能操作,不
能耦合其它功能操作。
GaussDB仅旧表名字段
支持如
schema.table_name
法;且新表名与旧表名
将属于同一schema
下。
GaussDB不支持新旧表
shema重命名操作;
但如有权限,则可在当
schema下修改其它
schema下表名称。
GaussDBrename
组表的语法支持全为本
地临时表的重命名,不
支持本地临时表和非本
地临时表组合的场景。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 420
序号 MySQL数据库功能
概述
详细语法说明 GaussDB数据库实现差异
15 支持增加子分区语
法兼容
ALTER TABLE [ IF
EXISTS ] { table_name
[*] | ONLY table_name
| ONLY
( table_name )}
action [, ... ];
action:
move_clause |
exchange_clause |
row_clause |
merge_clause |
modify_clause |
split_clause |
add_clause |
drop_clause |
ilm_clause
add_clause:
ADD
{{partition_less_than_i
tem |
partition_start_end_ite
m | partition_list_item}
|
PARTITION({partition_
less_than_item |
partition_start_end_ite
m |
partition_list_item})}
不支持如下语法添加多
分区:
ALTER TABLE table_name
ADD PARTITION
(partition_denition1,
partition_denition1,);
仅支持原有添加多分区
语法:
ALTER TABLE table_name
ADD PARTITION
(partition_denition1), ADD
PARTITION
(partition_denition2[y1] ),
;
8.2.2.8.2 DML
序号
MySQL数据库功能概述 详细语法说
GaussDB数据库实现差异
1 DELETE支持从多个表中
删除数据
DELETE -
2 DELETE支持ORDER BY
LIMIT
DELETE -
3 DELETE支持从指定分区
(或子分区)删除数据
DELETE -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 421
序号 MySQL数据库功能概述 详细语法说
GaussDB数据库实现差异
4 UPDATE支持从多个表中
更新数据
UPDATE -
5 UPDATE支持ORDER BY
LIMIT
UPDATE -
6 SELECT INTO语法兼容 SELECT
GaussDB可以使用SELECT
INTO根据查询结果创建一个新
表,MySQL不支持。
GaussDBSELECT INTO语法
不支持将多个查询进行集合运
算后的结果作为查询结果。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 422
序号 MySQL数据库功能概述 详细语法说
GaussDB数据库实现差异
7 REPLACE INTO语法兼容 REPLACE
时间类型初始值的差异。例如:
MySQL不受严格模式和宽松
模式的影响,可向表中插入
时间0值,即:
mysql> CREATE TABLE test(f1
TIMESTAMP NOT NULL, f2
DATETIME NOT NULL, f3 DATE
NOT NULL);
Query OK, 1 row aected (0.00 sec)
mysql> REPLACE INTO test
VALUES(f1, f2, f3);
Query OK, 1 row aected (0.00 sec)
mysql> SELECT * FROM test;
+---------------------
+---------------------+------------+
| f1 | f2 |
f3 |
+---------------------
+---------------------+------------+
| 0000-00-00 00:00:00 | 0000-00-00
00:00:00 | 0000-00-00 |
+---------------------
+---------------------+------------+
1 row in set (0.00 sec)
GaussDB在宽松模式下才可
以成功插入时间0值,即
gaussdb=# SET b_format_version =
'5.7';
SET
gaussdb=# SET
b_format_dev_version = 's1';
SET
gaussdb=# SET sql_mode = '';
SET
gaussdb=# CREATE TABLE test(f1
TIMESTAMP NOT NULL, f2
DATETIME NOT NULL, f3 DATE
NOT NULL);
CREATE TABLE
gaussdb=# REPLACE INTO test
VALUES(f1, f2, f3);
REPLACE 0 1
gaussdb=# SELECT * FROM test;
f1 | f2 | f3
---------------------
+---------------------+------------
0000-00-00 00:00:00 | 0000-00-00
00:00:00 | 0000-00-00
(1 row)
在严格模式下,则报错date/
time eld value out of
range: "0000-00-00
00:00:00"
位串类型初始值的差异。例
如:
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 423
序号 MySQL数据库功能概述 详细语法说
GaussDB数据库实现差异
MySQLBIT类型的初始值为
空串'',即:
mysql> CREATE TABLE test(f1
BIT(3) NOT NULL);
Query OK, 0 rows aected (0.01
sec)
mysql> REPLACE INTO test
VALUES(f1);
Query OK, 1 row aected (0.00 sec)
mysql> SELECT f1, f1 IS NULL
FROM test;
+----+------------+
| f1 | f1 is null |
+----+------------+
| | 0 |
| | 0 |
+----+------------+
2 rows in set (0.00 sec)
GaussDB位串类型BIT的初始
值为NULL,则报错。
gaussdb=# CREATE TABLE test(f1
BIT(3) NOT NULL);
CREATE TABLE
gaussdb=# REPLACE INTO test
VALUES(f1);
ERROR: null value in column "f1"
violates not-null constraint
DETAIL: Failing row contains (null).
8
SELECT支持指定多分区
查询
SELECT -
9 UPDATE支持指定多分区
更新
UPDATE -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 424
序号 MySQL数据库功能概述 详细语法说
GaussDB数据库实现差异
10 LOAD DATA导入数据功
LOAD
DATA
LOAD DATA语法执行结果与
MySQL严格模式一致,宽松模
式暂未适配。
IGNORELOCAL参数功能仅为
当导入数据与表中数据存在冲
突时,忽略当前冲突行数据功
能和当文件中字段数小于指定
表中列数时自动为其余列填充
默认值功能,其余功能暂未适
配。
指定LOCAL关键字,且文件路
径为相对路径时,文件从二进
制目录下搜索;不指定LOCAL
关键字,且文件路径为相对路
径时,文件从数据目录下搜
索。
语法中指定分隔符,转义字
符,分行符等符号时,若指定
为单引号,将导致词法解析错
误。
[(col_name_or_user_var [,
col_name_or_user_var] ...)]
定列参数不支持重复指定列。
[FIELDS TERMINATED BY
'string']指定换行符不能与
[LINES TERMINATED BY
'string']分隔符相同。
执行LOAD DATA语法写入表中
的数据若无法转换为表中数据
类型格式时报错。
LOAD DATA SET表达式中不支
持指定列名计算。
set表达式返回值类型与对应
列类型之间不存在隐式转换函
数则报错。
LOAD DATA只能用于表,不能
用于视图。
windows下的文件与linux环境
下文件默认换行符存在差异,
LOAD DATA无法识别此场景会
报错,建议用户导入时检查导
入文件行尾换行符。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 425
序号 MySQL数据库功能概述 详细语法说
GaussDB数据库实现差异
11 INSERT IGNORE兼容 INSERT
IGNORE
GaussDB会返回降级后的错误
信息,MySQL则会将降级后的
错误信息记录到错误堆栈中,
然后调用show warnings;命令
查看。
时间类型的差异。例如:
GaussDBdate
datetimetimestamp默认
零值。
gaussdb=# CREATE TABLE test(f1
DATE NOT NULL, f2 DATETIME
NOT NULL, f3 TIMESTAMP NOT
NULL);
CREATE TABLE
gaussdb=# INSERT IGNORE INTO
test VALUES(NULL, NULL, NULL);
WARNING: null value in column
"f1" violates not-null constraint
DETAIL: Failing row contains (null,
null, null, null).
WARNING: null value in column
"f2" violates not-null constraint
DETAIL: Failing row contains (null,
null, null, null).
WARNING: null value in column
"f3" violates not-null constraint
DETAIL: Failing row contains (null,
null, null, null).
INSERT 0 1
gaussdb=#
SELECT * FROM test;
f1 | f2 |
f3
------------+---------------------
+---------------------
1970-01-01 | 1970-01-01 00:00:00
| 1970-01-01 00:00:00
(1 row)
MySQLdatedatetime
timestamp默认零值。
mysql> CREATE TABLE test(f1
DATE NOT NULL, f2 DATETIME
NOT NULL, f3 TIMESTAMP NOT
NULL);
Query OK, 0 rows aected (0.00
sec)
mysql> INSERT IGNORE INTO test
VALUES(NULL, NULL, NULL);
Query OK, 1 row aected, 3
warnings (0.00 sec)
mysql> show warnings;
+---------+------
+----------------------------+
| Level | Code |
Message |
+---------+------
+----------------------------+
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 426
序号 MySQL数据库功能概述 详细语法说
GaussDB数据库实现差异
| Warning | 1048 | Column 'f1'
cannot be null |
| Warning | 1048 | Column 'f2'
cannot be null |
| Warning | 1048 | Column 'f3'
cannot be null |
+---------+------
+----------------------------+
3 rows in set (0.00 sec)
mysql> SELECT * FROM test;
+------------+---------------------
+---------------------+
| f1 | f2 |
f3 |
+------------+---------------------
+---------------------+
| 0000-00-00 | 0000-00-00 00:00:00
| 0000-00-00 00:00:00 |
+------------+---------------------
+---------------------+
1 row in set (0.00 sec)
由于GaussDB不支持MySQL
bit类型,因此忽略bit类型NOT
NULL约束和插入的bit类型长度
与定义不同的场景下不支持
INSERT IGNORE错误降级。
GaussDBbit类型
gaussdb=# CREATE TABLE test(f1
BIT(10) NOT NULL);
CREATE TABLE
gaussdb=# INSERT IGNORE INTO
test VALUES(NULL);
ERROR: Un-support feature
DETAIL: ignore null for insert
statement is not supported in
column f1.
gaussdb=# INSERT IGNORE INTO
test VALUES('1010');
ERROR: bit string length 4 does
not match type bit(10)
CONTEXT: referenced column: f1
MySQLbit类型
mysql> CREATE TABLE test(f1
BIT(10) NOT NULL);
Query OK, 0 rows aected (0.00
sec)
mysql> INSERT IGNORE INTO test
VALUES(NULL);
Query OK, 1 row aected, 1
warning (0.00 sec)
mysql> INSERT IGNORE INTO test
VALUES('1010');
Query OK, 1 row aected, 1
warning (0.01 sec)
MySQL数据库时间类型指定精
度时,插入时间零值会显示精
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 427
序号 MySQL数据库功能概述 详细语法说
GaussDB数据库实现差异
度,GaussDB则不显示,例
如:
GaussDB指定时间精度
gaussdb=# CREATE TABLE test(f1
TIME(3) NOT NULL, f2
DATETIME(3) NOT NULL, f3
TIMESTAMP(3) NOT NULL);
CREATE TABLE
gaussdb=# INSERT IGNORE INTO
test VALUES(NULL,NULL,NULL);
WARNING: null value in column
"f1" violates not-null constraint
DETAIL: Failing row contains (null,
null, null).
WARNING: null value in column
"f2" violates not-null constraint
DETAIL: Failing row contains (null,
null, null).
WARNING: null value in column
"f3" violates not-null constraint
DETAIL: Failing row contains (null,
null, null).
INSERT 0 1
gaussdb=# SELECT * FROM test;
f1 | f2 | f3
----------+---------------------
+---------------------
00:00:00 | 1970-01-01 00:00:00 |
1970-01-01 00:00:00
(1 row)
MySQL指定时间精度
mysql> CREATE TABLE test(f1
TIME(3) NOT NULL, f2
DATETIME(3) NOT NULL, f3
TIMESTAMP(3) NOT NULL);
Query OK, 0 rows aected (0.00
sec)
mysql> INSERT IGNORE INTO test
VALUES(NULL,NULL,NULL);
Query OK, 1 row aected, 3
warnings (0.00 sec)
mysql> SELECT * FROM test;
+--------------
+-------------------------
+-------------------------+
| f1 | f2 |
f3 |
+--------------
+-------------------------
+-------------------------+
| 00:00:00.000 | 0000-00-00
00:00:00.000 | 0000-00-00
00:00:00.000 |
+--------------
+-------------------------
+-------------------------+
1 row in set (0.00 sec)
由于MySQL数据库和GaussDB
执行过程的差异,因此,产生
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 428
序号 MySQL数据库功能概述 详细语法说
GaussDB数据库实现差异
warnings条数可能不同,例
如:
GaussDB产生的warnings
gaussdb=# CREATE TABLE test(f1
INT, f2 INT not null);
CREATE TABLE
gaussdb=# INSERT INTO test
VALUES(1,0),(3,0),(5,0);
INSERT 0 3
gaussdb=# INSERT IGNORE INTO
test SELECT f1+1, f1/f2 FROM test;
WARNING: division by zero
CONTEXT: referenced column: f2
WARNING: null value in column
"f2" violates not-null constraint
DETAIL: Failing row contains (2,
null).
WARNING: division by zero
CONTEXT: referenced column: f2
WARNING: null value in column
"f2" violates not-null constraint
DETAIL: Failing row contains (4,
null).
WARNING: division by zero
CONTEXT: referenced column: f2
WARNING: null value in column
"f2" violates not-null constraint
DETAIL: Failing row contains (6,
null).
INSERT 0 3
MySQL产生的warnings条数
mysql> CREATE TABLE test(f1 INT,
f2 INT not null);
Query OK, 0 rows aected (0.01
sec)
mysql> INSERT INTO test
VALUES(1,0),(3,0),(5,0);
Query OK, 3 rows aected (0.00
sec)
Records: 3 Duplicates: 0
Warnings: 0
mysql> INSERT IGNORE INTO test
SELECT f1+1, f1/f2 FROM test;
Query OK, 3 rows aected, 4
warnings (0.00 sec)
Records: 3 Duplicates: 0
Warnings: 4
MySQL数据库和GaussDB
INSERT IGNORE在触发器中的
差异,例如:
GaussDB触发器中使用
INSERT IGNORE
gaussdb=# CREATE TABLE test1(f1
INT NOT NULL);
CREATE TABLE
gaussdb=# CREATE TABLE test2(f1
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 429
序号 MySQL数据库功能概述 详细语法说
GaussDB数据库实现差异
INT);
CREATE TABLE
gaussdb=# CREATE OR REPLACE
FUNCTION trig_test() RETURNS
TRIGGER AS $$
gaussdb$# BEGIN
gaussdb$# INSERT IGNORE INTO
test1 VALUES(NULL);
gaussdb$# RETURN NEW;
gaussdb$# END;
gaussdb$# $$ LANGUAGE plpgsql;
CREATE FUNCTION
gaussdb=# CREATE TRIGGER trig2
BEFORE INSERT ON test2 FOR
EACH ROW EXECUTE PROCEDURE
trig_test();
CREATE TRIGGER
gaussdb=# INSERT INTO test2
VALUES(NULL);
WARNING: null value in column
"f1" violates not-null constraint
DETAIL: Failing row contains (null).
CONTEXT: SQL statement "INSERT
IGNORE INTO test1
VALUES(NULL)"
PL/pgSQL function trig_test() line
3 at SQL statement
INSERT 0 1
gaussdb=# SELECT * FROM test1;
f1
----
0
(1 rows)
gaussdb=# SELECT * FROM test2;
f1
----
(1 rows)
MySQL触发器中使用INSERT
IGNORE
mysql> CREATE TABLE test1(f1 INT
NOT NULL);
Query OK, 0 rows aected (0.01
sec)
mysql> CREATE TABLE test2(f1
INT);
Query OK, 0 rows aected (0.00
sec)
mysql> DELIMITER ||
mysql> CREATE TRIGGER trig2
BEFORE INSERT ON test2 FOR
EACH ROW
-> BEGIN
-> INSERT IGNORE into test1
values(NULL);
-> END||
Query OK, 0 rows aected (0.01
sec)
mysql> DELIMITER ;
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 430
序号 MySQL数据库功能概述 详细语法说
GaussDB数据库实现差异
mysql> INSERT INTO test2
VALUES(NULL);
ERROR 1048 (23000): Column 'f1'
cannot be null
mysql> INSERT IGNORE INTO test2
VALUES(NULL);
Query OK, 1 row aected (0.00 sec)
mysql> SELECT * FROM test1;
+----+
| f1 |
+----+
| 0 |
+----+
1 row in set (0.00 sec)
mysql> SELECT * FROM test2;
+------+
| f1 |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
GaussDBboolserial的实现
机制与MySQL不同,因此其默
认零值与MySQL不同,例如:
GaussDB的行为
gaussdb=# CREATE TABLE test(f1
SERIAL, f2 BOOL NOT NULL);
NOTICE: CREATE TABLE will create
implicit sequence "test_f1_seq" for
serial column "test.f1"
CREATE TABLE
gaussdb=# INSERT IGNORE INTO
test values(NULL,NULL);
WARNING: null value in column
"f1" violates not-null constraint
DETAIL: Failing row contains (null,
null).
WARNING: null value in column
"f2" violates not-null constraint
DETAIL: Failing row contains (null,
null).
INSERT 0 1
gaussdb=# SELECT * FROM test;
f1 | f2
----+----
0 | f
(1 row)
MySQL的行为
mysql> CREATE TABLE test(f1
SERIAL, f2 BOOL NOT NULL);
Query OK, 0 rows aected (0.00
sec)
mysql> INSERT IGNORE INTO test
values(NULL,NULL);
Query OK, 1 row aected, 1
warning (0.00 sec)
mysql> SELECT * FROM test;
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 431
序号 MySQL数据库功能概述 详细语法说
GaussDB数据库实现差异
+----+----+
| f1 | f2 |
+----+----+
| 1 | 0 |
+----+----+
1 row in set (0.00 sec)
8.2.2.8.3 DCL
序号 概述 详细语法说明 差异
1 支持SET用户自定义
变量
SET
自定义变量长度的差
异。例如:
MySQL自定义变量
名长度没有约束。
GaussDB自定义变量
名长度不超过64
节,超过部分的变量
名会截断并提示告
警。
2 SET TRANSACTION
语法兼容
SET TRANSACTION MySQL可以设置当前会话
session)和全局
global)的事务隔离级
别和读写模式,GaussDB
设置当前会话需要设置参
b_format_behavior_comp
at_options包含
set_session_tranasction
设置全局只对当前数据库
生效。
3 SET NAMES指定
COLLATE字句
SET [ SESSION |
LOCAL ] NAMES
{'charset_name'
[COLLATE
'collation_name'] |
DEFAULT};
GaussDB暂不支持指定
charset_name与数据库字
符集不同。具体请参考
《开发指南》中“SQL
> SQL语法 > S >
SET ”章节。
8.2.2.9 驱动
8.2.2.9.1 JDBC
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 432
8.2.2.9.1.1 JDBC 接口参考
获取结果集中的数据
ResultSet对象提供了丰富的方法,以获取结果集中的数据。获取数据常用的方法如表1
所示,其他方法请参考JDK官方文档。
8-45 ResultSet 对象的常用方法
方法 描述 差异
int getInt(int
columnIndex)
按列标获取
int型数据。
-
int getInt(String
columnLabel)
按列名获取
int型数据。
-
String
getString(int
columnIndex)
按列标获取
String型数
据。
字段类型为整型且带有ZEROFILL属性时,
GaussDB按照ZEROFILL属性要求的宽度信息用0
进行补位后输出结果,MySQL直接输出结果。
String
getString(String
columnLabel)
按列名获取
String型数
据。
字段类型为整型且带有ZEROFILL属性时,
GaussDB按照ZEROFILL属性要求的宽度信息用0
进行补位后输出结果,MySQL直接输出结果。
Date getDate(int
columnIndex)
按列标获取
Date型数据
-
Date
getDate(String
columnLabel)
按列名获取
Date型数
据。
-
8.2.3 MySQL 数据库兼容性 M-Compatibility 模式
8.2.3.1 MySQL 数据库兼容性概述
本章节主要介绍GaussDB数据库的M-Compatibility兼容模式与MySQL5.7数据库的兼
容性对比信息。仅介绍505.1版本后新增的兼容性特性,特性的相关规格和约束建议在
开发指南中查看。
为了适配MySQL语句及pymysqlJDBC等多种连接方式,GaussDB新增了M-
Compatibility协议。
GaussDB数据库在数据类型、SQL功能和数据库对象等基本功能上与MySQL数据库兼
容。
GaussDB的执行计划和优化、explain显示结果与MySQL不同。
由于GaussDB数据库与MySQL数据库底层框架实现存在差异,GaussDB数据库与
MySQL数据库仍存在部分差异。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 433
由于M-Compatibility的底层架构与MySQL存在差异,对于information_schemam_schema
MySQL名称相同的Schema(具体参见M-Compatibility开发指南第六章),其查询性能可能
存在差异。例如count函数无法做执行上的优化,表现为select *select count(*)语句耗时近
似。
Database Schema 设计
MySQL的数据对象包括DATABASETABLEINDEXVIEWTRIGGERPROC等,
MySQL的对象层次跟GaussDB的对应关系是从上至下且1对多包含关系。如下图所
示:
8-1 MySQL GaussDB Database Schema 之间的差异
MySQLDatabaseSchema是同义词;而在GaussDB中,一个Database 下可
以有多个Schema。在该特性中,每个MySQL中的Database都被映射到GaussDB
的一个Schema
MySQL中,INDEX从属于一个TABLE,但在GaussDB中,INDEX从属于一个
Schema。这个差异导致INDEX名在GaussDB中要求在Schema内唯一,但在
MySQL中仅要在在一个表内唯一。这个差异将作为当前约束予以保留。
8.2.3.2 数据类型
GaussDB的数据类型的大部分功能场景与MySQL一致,但存在部分差异。
除特别说明,部分数据类型精度、标度、位数大小等不支持用浮点型数值定义,
建议使用合法的整型数值定义。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 434
8.2.3.2.1 数值数据类型
8-46 整数类型
序号
MySQL数据
GaussDB
据库
差异
1 BOOL 支持,存在
差异
输出格式:GaussDBSELECT TRUE/FALSE
输出结果为t/fMySQL1/0
MySQLBOOL/BOOLEAN类型实际映射为
TINYINT类型。
2
BOOLEAN 支持,存在
差异
3 TINYINT[(M
)]
[UNSIGNED
]
支持,存在
差异
详细请参见说明。
4 SMALLINT[(
M)]
[UNSIGNED
]
支持,存在
差异
详细请参见说明。
5 MEDIUMIN
T[(M)]
[UNSIGNED
]
支持,存在
差异
MySQL存储MEDIUMINT数据需要3字节。
带符号的范围是-8,388,608 ~
+8,388,607
无符号的范围是0 ~ +16,777,215
GaussDB映射为INT类型,存储需要4字节,
通过边界值判断限制取值范围。
带符号的范围是-8,388,608 ~
+8,388,607
无符号的范围是0 ~ +16,777,215
其他差异请参见说明。
6 INT[(M)]
[UNSIGNED
]
支持,存在
差异
详细请参见说明。
7 INTEGER[(M
)]
[UNSIGNED
]
支持,存在
差异
详细请参见说明。
8 BIGINT[(M)
]
[UNSIGNED
]
支持,存在
差异
详细请参见说明。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 435
输入格式:
MySQL
整型类型对于类似”1.2.3.4.5”有多个小数点的字符串形式输入,在宽松模式下MySQL
发生错误解析,抛出WARNING并插表成功,例如将”1.2.3.4.5”插入表后值为12
GaussDB
整型类型对于类似”1.2.3.4.5”有多个小数点的的字符串形式输入,在宽松模式下,会将
第二个小数点后的字符当作非法字符全部截断,抛出WARNING并插表成功,例如将”
1.2.3.4.5”插入表后值为1,”1.6.3.4.5”插入表后值为2
8-47 任意精度类型
序号 MySQL数据
GaussDB
据库
差异
1 DECIMAL[(
M[,D])]
支持,存在
差异
MySQL decimal用一个9*9的数组存储数值,
整数部分和小数部分分开存储,超过该长度时
优先截小数部分。GaussDB只会在整数位数超
81位时截断。
2
NUMERIC[(
M[,D])]
支持,存在
差异
3 DEC[(M[,D])
]
支持,存在
差异
4 FIXED[(M[,D
])]
支持,存在
差异
8-48 浮点类型
序号
MySQL数据
GaussDB
据库
差异
1 FLOAT[(M,D
)]
支持,存在
差异
FLOAT数据类型不支持KEY键值分区策略分区
表。
2 FLOAT(p) 支持,存在
差异
FLOAT数据类型不支持KEY键值分区策略分区
表。
3 DOUBLE[(M
,D)]
支持,存在
差异
DOUBLE数据类型不支持KEY键值分区策略分
区表。
4 DOUBLE
PRECISION[(
M,D)]
支持,存在
差异
DOUBLE PRECISION数据类型不支持KEY键值
分区策略分区表。
5 REAL[(M,D)
]
支持,存在
差异
REAL数据类型不支持KEY值分区策略分区表。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 436
8.2.3.2.2 日期与时间数据类型
8-49 日期与时间数据类型
MySQL数据
GaussDB
据库
差异
1 DATE 支持,存在
差异。
GaussDB支持date数据类型,与MySQL相比
规格上存在如下差异:
输入格式:
分隔符:反斜杠\MySQLGaussDB
中都视为转义,但MySQL支持\0
GaussDB暂不支持,因此反斜杠作为分
隔符且分隔符后为字符0GaussDB
报错。
2 DATETIME[(f
sp)]
支持,存在
差异。
GaussDB支持datetime数据类型,与MySQL
相比规格上存在如下差异:
输入格式:
分隔符:反斜杠\MySQLGaussDB
中都视为转义,但MySQL支持\0
GaussDB暂不支持,因此反斜杠作为分
隔符且分隔符后为字符0GaussDB
报错。
3 TIMESTAMP[
(fsp)]
支持,存在
差异。
GaussDB支持timestamp数据类型,与
MySQL相比规格上存在如下差异:
输入格式:
分隔符:反斜杠\MySQLGaussDB
中都视为转义,但MySQL支持\0
GaussDB暂不支持,因此反斜杠作为分
隔符且分隔符后为字符0GaussDB
报错。
默认值:MySQL 5.7timestamp列默
认有default value,为数据插入时的实
时时间。GaussDBMySQL 8.0一致,
均不设置默认值,即插入null时,值为
null
4 TIME[(fsp)] 支持,存在
差异。
GaussDB支持time数据类型,与MySQL相比
规格上存在如下差异:
输入格式:
分隔符:反斜杠\MySQLGaussDB
中都视为转义,但MySQL支持\0
GaussDB暂不支持,因此反斜杠作为分
隔符且分隔符后为字符0GaussDB
报错。
当时间类型的时、分、秒、纳秒为0时,
GaussDBMySQL可能存在符号位不同的
情况。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 437
MySQL数据
GaussDB
据库
差异
5 YEAR[(4)] 支持。 -
GaussDB不支持ODBC语法的字面量:
{ d 'str' }
{ t 'str' }
{ ts 'str' }
GaussDB支持标准SQL字面量,且类型关键字后面可选择添加精度,MySQL不支持:
DATE[(n)] 'str'
TIME[(n)] 'str'
TIMESTAMP[(n)] 'str'
8.2.3.2.3 字符串数据类型
8-50 字符串数据类型
MySQL数据
GaussDB
据库
差异
1 CHAR(M) 支持,存在
差异
输入格式:
输入二进制或十六进制字符串,
GaussDB输出为十六进制,MySQL
根据ASCII码表转义,无法转义的输出
为空。
GaussDB不支持转义字符输入,
MySQL支持。
2 VARCHAR(M) 支持,存在
差异
输入格式:
GaussDB的自定义函数参数和返回值不
支持长度校验,存储过程参数不支持长
度校验,MySQL支持。
GaussDB的自定义函数和存储过程中的
临时变量支持长度校验以及严格宽松模
式下的报错和截断告警,MySQL不支
持。
GaussDB不支持转义字符输入,
MySQL支持。
输入二进制或十六进制字符串,
GaussDB输出为十六进制,MySQL
根据ASCII码表转义,无法转义的输出
为空。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 438
MySQL数据
GaussDB
据库
差异
3 TINYTEXT 支持,存在
差异
输入格式:
GaussDB不支持转义字符输入,
MySQL支持。
默认值:创建表列时语法上允许设置默
认值,MySQL不允许设置默认值。
输入二进制或十六进制字符串,
GaussDB输出为十六进制,MySQL
根据ASCII码表转义,无法转义的输出
为空。
主键:MySQLTINYTEXT类型不支持主
键,GaussDB支持。
索引:MySQLTINYTEXT类型不支持除
前缀索引外其他索引方法,GaussDB
持。
4 TEXT 支持,存在
差异
输入格式:
GaussDB不支持转义字符输入,
MySQL支持。
默认值:创建表列时语法上允许设置默
认值,MySQL不允许设置默认值。
输入二进制或十六进制字符串,
GaussDB输出为十六进制,MySQL
根据ASCII码表转义,无法转义的输出
为空。
主键:MySQLTEXT类型不支持主键,
GaussDB支持。
索引:MySQLTEXT类型不支持除前缀
索引外其他索引方法,GaussDB支持。
5 MEDIUMTEX
T
支持,存在
差异
输入格式:
GaussDB不支持转义字符输入,
MySQL支持。
默认值:创建表列时语法上允许设置默
认值,MySQL不允许设置默认值。
输入二进制或十六进制字符串,
GaussDB输出为十六进制,MySQL
根据ASCII码表转义,无法转义的输出
为空。
主键:MySQLMEDIUMTEXT类型不支
持主键,GaussDB支持。
索引:MySQLMEDIUMTEXT类型不支
持除前缀索引外其他索引方法,GaussDB
支持。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 439
MySQL数据
GaussDB
据库
差异
6 LONGTEXT 支持,存在
差异
输入格式:
GaussDB只支持不超过1G字节长度,
MySQL支持4G-1字节长度。
GaussDB不支持转义字符输入,
MySQL支持。
默认值:创建表列时语法上允许设置默
认值,MySQL不允许设置默认值。
输入二进制或十六进制字符串,
GaussDB输出为十六进制,MySQL
根据ASCII码表转义,无法转义的输出
为空。
主键:MySQLLONGTEXT类型不支持主
键,GaussDB支持。
索引:MySQLLONGTEXT类型不支持除
前缀索引外其他索引方法,GaussDB
持。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 440
8.2.3.2.4 二进制数据类型
8-51 二进制数据类型
MySQL数据
GaussDB
据库
差异
1 BINARY[(M)] 支持,存在
差异
输入格式:
GaussDB不支持转义字符输入,
MySQL支持。
输入二进制或十六进制字符串,
GaussDB输出为十六进制,MySQL
根据ASCII码表转义,无法转义的输出
为空。
插入字符串长度小于目标长度时,
GaussDB填充符是0x20MySQL
0x00
字符集:默认字符集为数据库初始化字符
集,MySQL默认类型字符集为BINARY
符集。
输出格式:
JDBC协议输出时BINARY类型的末尾空
格显示为空格,MySQL末尾空格显示
\x00
宽松模式下, BINARY类型面对输入超
n的字节数的字符输入(例如中文字
), 会将超限的整个字符截断。
MySQL中会将超限的整个字符的前几
位满足n范围内的字节信息保留,但输
出时字符信息显示乱码。
说明
GaussDB中,由于BINARY类型填充符和\0截断
MySQL的差异,在操作符比较计算,字符串
相关系统函数计算,索引匹配,数据导入导出
等场景下与MySQL的表现会存在差异。差异场
景请见本节示例。
2
VARBINARY(
M)
支持,存在
差异
输入格式:
GaussDB不支持转义字符输入,
MySQL支持。
输入二进制或十六进制字符串,
GaussDB输出为十六进制,MySQL
根据ASCII码表转义,无法转义的输出
为空。
字符集:默认字符集为数据库初始化字符
集,MySQL默认类型字符集为BINARY
符集。
输出格式:JDBC协议输出时BINARY类型
的末尾空格显示为空格,MySQL末尾空格
显示为\x00
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 441
MySQL数据
GaussDB
据库
差异
3 TINYBLOB 支持,存在
差异
输入格式:
GaussDB不支持转义字符输入,
MySQL支持。
默认值:创建表列时语法上允许设置默
认值,MySQL不允许设置默认值。
输入二进制或十六进制字符串,
GaussDB输出为十六进制,MySQL
根据ASCII码表转义,无法转义的输出
为空。
主键:MySQLTINYBLOB类型不支持主
键,GaussDB支持。
索引:MySQLTINYBLOB类型不支持除
前缀索引外其他索引方法,GaussDB
持。
4 BLOB 支持,存在
差异
输入格式:
GaussDB不支持转义字符输入,
MySQL支持。
默认值:创建表列时语法上允许设置默
认值,MySQL不允许设置默认值。
输入二进制或十六进制字符串,
GaussDB输出为十六进制,MySQL
根据ASCII码表转义,无法转义的输出
为空。
主键:MySQLBLOB类型不支持主键,
GaussDB支持。
索引:MySQLBLOB类型不支持除前缀
索引外其他索引方法,GaussDB支持。
5 MEDIUMBLO
B
支持,存在
差异
输入格式:
GaussDB不支持转义字符输入,
MySQL支持。
默认值:创建表列时语法上允许设置默
认值,MySQL不允许设置默认值。
输入二进制或十六进制字符串,
GaussDB输出为十六进制,MySQL
根据ASCII码表转义,无法转义的输出
为空。
主键:MySQLMEDIUMBLOB类型不支
持主键,GaussDB支持。
索引:MySQLMEDIUMBLOB类型不支
持除前缀索引外其他索引方法,GaussDB
支持。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 442
MySQL数据
GaussDB
据库
差异
6 LONGBLOB 支持,存在
差异
取值范围:只支持不超过1G字节长度,
MySQL支持4G-1字节长度。
输入格式:
GaussDB不支持转义字符输入,
MySQL支持。
默认值:创建表列时语法上允许设置默
认值,MySQL不允许设置默认值。
输入二进制或十六进制字符串,
GaussDB输出为十六进制,MySQL
根据ASCII码表转义,无法转义的输出
为空。
主键:MySQLLONGBLOB类型不支持
主键,GaussDB支持。
索引:MySQLLONGBLOB类型不支持
除前缀索引外其他索引方法,GaussDB
持。
7 BIT[(M)] 支持,存在
差异
输出格式:所有输出按照二进制字符串形
式输出。MySQL中根据ASCII码表转义,
无法转义的输出为空。
示例:
-- GaussDB场景
m_db=# create table test(a binary(10));
CREATE TABLE
m_db=# insert into test values(0x8000);
INSERT 0 1
m_db=# select hex(a) from test;
hex
----------------------
80202020202020202020
(1 row)
m_db=# select * from test where hex(a) = 80000000000000000000;
a
---
(0 rows)
m_db=# CREATE TABLE test2(a binary(10));
CREATE TABLE
m_db=# INSERT INTO test2 VALUES(0x80008000);
INSERT 0 1
m_db=# SELECT hex(a) FROM test2;
hex
----------------------
80202020202020202020
(1 row)
-- Mysql场景
mysql> create table test(a binary(10));
Query OK, 0 rows aected (0.01 sec)
mysql> insert into test values(0x8000);
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 443
Query OK, 1 row aected (0.00 sec)
mysql> select hex(a) from test;
+----------------------+
| hex(a) |
+----------------------+
| 80000000000000000000 |
+----------------------+
1 row in set (0.00 sec)
mysql> select * from test where hex(a) = 80000000000000000000;
+------------+
| a |
+------------+
| ▒ |
+------------+
1 row in set (0.00 sec)
mysql> CREATE TABLE test2(a binary(10));
Query OK, 0 rows aected (0.00 sec)
mysql> INSERT INTO test2 VALUES(0x80008000);
Query OK, 1 row aected (0.00 sec)
mysql> SELECT hex(a) FROM test2;
+----------------------+
| hex(a) |
+----------------------+
| 80008000000000000000 |
+----------------------+
1 row in set (0.00 sec)
8.2.3.2.5 数据类型支持的属性
8-52 数据类型支持的属性
序号
MySQL数据库 GaussDB数据库
1 NULL 支持
2 NOT NULL 支持
3 DEFAULT 支持
4 ON UPDATE 支持
4 PRIMARY KEY 支持
5 AUTO_INCREMENT 支持
6 CHARACTER SET name 支持
7 COLLATE name 支持
8.2.3.2.6 数据类型转换
不同的数据类型之间支持转换。有如下场景涉及到数据类型转换:
操作符(比较操作符、运算操作符等)的操作数的数据类型不一致。常见于查询
条件或者关联条件中的比较运算。
函数调用时实参和形参的数据类型不一致。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 444
DML语句要更新(包括INSERTUPDATEMERGEREPLACE等)的目标列,数
据的类型和列的定义类型不一致。
显式的类型转换:CAST(expr AS datatype),将expr表达式类型转换为datatype
类型。
集合运算(UNIONMINUSEXCEPTINTERSECT)确定最终投影列的目标数
据类型后,各个SELECT查询的投影列的类型和目标数据类型不一致。
其他表达式计算场景,根据不同表达式的数据类型, 来决定用于比较或者最终结
果的目标数据类型。
数据类型转换差异点主要分为三类:隐式转换,显式转换和UINON/CASE
双冒号转换差异点
GaussDB中使用双冒号将函数入参转换为期望类型可能导致结果超出预期,且
MySQL中无双冒号功能。
示例:
m_db=# SELECT POW("12"::VARBINARY,"12"::VARBINARY);
ERROR: value out of range: overow
CONTEXT: referenced column: pow
varbinary col
m_db=# CREATE TABLE test_varbinary (
A VARBINARY(10)
);
m_db=# INSERT INTO test_varbinary VALUES ('12');
m_db=# SELECT POW(A, A) FROM test_varbinary;
pow
---------------
8916100448256
(1 row)
隐式类型转换差异点:
GaussDB中统一平铺成小类型到小类型的转换规则,MySQL中使用小类型转大类
型,大类型转小类型的转换规则。
GaussDB中隐式转换因数据类型本身差异点,输出格式存在部分行为不一致。
GaussDB中的隐式转换,BIT数据类型到字符数据类型和二进制数据类型转换,输
出存在部分行为不一致。GaussDB输出为十六进制,MySQL中根据ASCII码表转
义,无法转义的输出为空。
示例:
m_db=# CREATE TABLE bit_storage (
VS_COL1 BIT(4),
VS_COL2 BIT(4),
VS_COL3 BIT(4),
VS_COL4 BIT(4),
VS_COL5 BIT(4),
VS_COL6 BIT(4),
VS_COL7 BIT(4),
VS_COL8 BIT(4)
);
m_db=# CREATE TABLE string_storage (
VS_COL1 BLOB,
VS_COL2 TINYBLOB,
VS_COL3 MEDIUMBLOB,
VS_COL4 LONGBLOB,
VS_COL5 TEXT,
VS_COL6 TINYTEXT,
VS_COL7 MEDIUMTEXT,
VS_COL8 LONGTEXT
);
m_db=# INSERT INTO bit_storage VALUES(B'101', B'101', B'101', B'101', B'101', B'101', B'101', B'101');
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 445
m_db=# INSERT INTO string_storage SELECT * FROM bit_storage;
m_db=# SELECT * FROM string_storage;
VS_COL1 | VS_COL2 | VS_COL3 | VS_COL4 | VS_COL5 | VS_COL6 | VS_COL7 | VS_COL8
---------+---------+---------+---------+---------+---------+---------+---------
\x05 | \x05 | \x05 | \x05 | \x05 | \x05 | \x05 | \x05
(1 row)
m_db=# DROP TABLE bit_storage, string_storage;
mysql> CREATE TABLE bit_storage (
VS_COL1 BIT(4),
VS_COL2 BIT(4),
VS_COL3 BIT(4),
VS_COL4 BIT(4),
VS_COL5 BIT(4),
VS_COL6 BIT(4),
VS_COL7 BIT(4),
VS_COL8 BIT(4)
);
mysql> CREATE TABLE bit_storage (
VS_COL1 BIT(4),
VS_COL2 BIT(4),
VS_COL3 BIT(4),
VS_COL4 BIT(4),
VS_COL5 BIT(4),
VS_COL6 BIT(4),
VS_COL7 BIT(4),
VS_COL8 BIT(4)
);
mysql> INSERT INTO bit_storage VALUES(B'101', B'101', B'101', B'101', B'101', B'101', B'101', B'101');
mysql> INSERT INTO string_storage SELECT * FROM bit_storage;
mysql> SELECT * FROM string_storage;
+---------+---------+---------+---------+---------+---------+---------+---------+
| VS_COL1 | VS_COL2 | VS_COL3 | VS_COL4 | VS_COL5 | VS_COL6 | VS_COL7 | VS_COL8 |
+---------+---------+---------+---------+---------+---------+---------+---------+
| | | | | | | | |
+---------+---------+---------+---------+---------+---------+---------+---------+
1 row in set (0.00 sec)
mysql> DROP TABLE bit_storage, string_storage;
中间带有0x00的二进制或十六进制字符串插入二进制数据类型时,GaussDB部分
插入,0x00后的字符会截断,MySQL可以完整插入。
示例:
m_db=# CREATE TABLE blob_storage (
A BLOB
);
m_db=# INSERT INTO blob_storage VALUES (0xBB00BB);
m_db=# SELECT hex(A) FROM blob_storage;
hex
-----
BB
(1 row)
m_db=# DROP TABLE blob_storage;
mysql> CREATE TABLE blob_storage (
A TEXT
);
mysql> INSERT INTO blob_storage VALUES (0xBB00BB);
mysql> SELECT hex(A) FROM blob_storage;
+--------+
| hex(a) |
+--------+
| BB00BB |
+--------+
1 row in set (0.01 sec)
mysql> DROP TABLE blob_storage;
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 446
中间带有0x00的二进制或十六进制字符串插入字符串数据类型时,GaussDB部分
插入,0x00后的字符会截断,MySQL严格模式不允许插入,宽松模式插入空字符
串。
示例:
m_db=# CREATE TABLE text_storage (
A TEXT
);
m_db=# INSERT INTO text_storage VALUES (b'101110110000000010111011');
m_db=# SELECT hex(A) FROM text_storage;
hex
-----
BB
(1 row)
m_db=# DROP TABLE text_storage;
mysql> CREATE TABLE text_storage (
A TEXT
);
mysql> INSERT INTO text_storage VALUES (b'101110110000000010111011');
ERROR 1366 (HY000): Incorrect string value: '\xBB\x00\xBB' for column 'A' at row 1
mysql> SELECT hex(A) FROM text_storage;
Empty set (0.00 sec)
mysql> SET SQL_MODE='';
mysql> INSERT INTO text_storage VALUES (b'101110110000000010111011');
mysql> SELECT hex(A) FROM text_storage;
+--------+
| hex(A) |
+--------+
| |
+--------+
1 row in set (0.01 sec)
mysql> DROP TABLE text_storage;
WHERE子句中只带有普通字符串,GaussDB't''true''yes' 'y''on'返回
TRUE'no''f''o''false''n'返回FALSE,其余字符串报错。MySQL通过字
符串转换为INT1判断返回TRUE/FALSE
示例:
m_db=# CREATE TABLE test_where (
A INT
);
m_db=# INSERT INTO test_where VALUES (1);
m_db=# SELECT * FROM test_where WHERE '111';
ERROR: invalid input syntax for type boolean: "111"
LINE 1: select * from test_where where '111';
m_db=# DROP TABLE test_where;
mysql> CREATE TABLE test_where (
A INT
);
mysql> INSERT INTO test_where VALUES (1);
mysql> SELECT * FROM test_where WHERE '111';
+------+
| a |
+------+
| 1 |
+------+
1 row in set (0.01 sec)
mysql> DROP TABLE test_where;
对于YEAR类型的输入,在将字符串转换为整型的过程中,MySQL考虑科学计数
法,GaussDB暂不支持,统一做截断处理。
示例:
m_db=# CREATE TABLE test_year (
A YEAR
);
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 447
m_db=# INSERT INTO test_year VALUES ('2E3x');
WARNING: Data truncated for column.
LINE 1: insert into t1 values ('2E3x');
^
CONTEXT: referenced column: a
m_db=# SELECT * FROM test_year ORDER BY A;
a
------
2002
(1 row)
m_db=# DROP TABLE test_year;
mysql> CREATE TABLE test_year (
A YEAR
);
mysql> INSERT INTO test_year VALUES ('2E3x');
mysql> SELECT * FROM test_year ORDER BY A;
+------+
| a |
+------+
| 2000 |
+------+
1 row in set (0.01 sec)
mysql> DROP TABLE test_year;
显式类型转换差异点:
GaussDB中平铺成对各目标类型的转换规则,MySQL中使用C++多态重载函数,在嵌
套场景中存在不一致行为。
示例:
m_db=# SELECT CAST(GREATEST(date'2023-01-01','2023-01-01') AS SIGNED);
WARNING: Truncated incorrect INTEGER value: '2023-01-01'
CONTEXT: referenced column: cast
cast
------
2023
(1 row)
mysql> SELECT CAST(GREATEST(date'2023-01-01','2023-01-01') AS SIGNED);
+---------------------------------------------------------+
| CAST(GREATEST(date'2023-01-01','2023-01-01') AS SIGNED) |
+---------------------------------------------------------+
| 20230101 |
+---------------------------------------------------------+
UNIONCASE和相关构造差异点:
POLYGON + NULLPOINT + NULLPOLYGON + POINT组合在MySQL中均返
GEOMETRY类型,GaussDB中未涉及,暂时当做报错处理。
SETENUM两种类型暂未支持,暂时当做报错处理。
常量类型和其他类型做类型聚合的时候,输出类型的精度为其他类型的精度。如
select "helloworld" union select p from t;”的结果的精度为属性p的精度。
定点常量和不带精度约束的类型(非字符串类型如intboolyear等,聚合结果
类型为定点类型)聚合时,精度约束会按照定点数默认精度31输出。
merge rule差异:
MySQL 5.7YEARTINYINTINTMEDIUMINTBIGINTBOOL聚合的结果
类型为带UNSIGNED的类型,GaussDB的结果类型为不带UNSIGNED的类型;
MySQLBITINTNUMERICFLOATDOUBLE等数值类型的聚合类型为
VARBINARY类型,GaussDBBITINT|NUMERIC聚合为NUMERIC类型,和
FLOAT或者DOUBLE类型聚合时,结果为DOUBLE类型,和无符号整型聚合时为
UINT8类型。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 448
MySQLBINARYCHAR填充字符不相同,BINARY填充'\0'CHAR填充空格,
GaussDBBINARYCHAR都是填充空格。
8.2.3.3 系统函数
GaussDB数据库兼容绝大多数MySQL的系统函数,但存在部分差异。只能使用M-
Compatibility兼容模式下的系统函数,不能使用原GaussDB的系统函数,避免产生非
预期的结果。当前存在原GaussDB的系统函数和MySQL系统函数同名,但是M-
Compatibility兼容模式下尚未支持这些函数的情况;一部分未支持的同名函数会提示
用户在M-Compatibility兼容模式下不支持,另外一部分同名函数仍然保持原GaussDB
系统函数的行为。用户禁止使用这些同名函数,避免产生非预期的结果。具体同名函
数列表如下:
8-53 M-Compatibility 兼容模式下提示不支持的同名函数
cot isEmpty json_append json_array json_array_ap
pend
json_array_ins
ert
json_contains json_contains
_path
json_depth json_extract
json_insert json_keys json_length json_merge json_merge_p
atch
json_merge_p
reserve
json_object json_quote json_remove json_valid
json_replace json_search json_set json_type json_unquote
last_insert_id md5 mod octet_length overlaps
point radians stddev_pop stddev_samp var_pop
var_samp variance lag lead -
8-54 M-Compatibility 兼容模式下保持原 GaussDB 系统函数行为的同名函数
ceil
decode encode format instr
position round stddev regexp_instr regexp_like
regexp_replac
e
regexp_substr row_num - -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 449
M-Compatibility兼容模式下,系统函数存在以下公共差异:
1. 系统函数的返回值类型仅考虑入参node类型为Var(表中数据)和Const(常量输入)类型时
的情况与MySQL保持一致,其他情况(如入参为运算表达式、函数表达式等)可能返回值的
类型与MySQL有差异。
2. 当聚合函数以其他函数、操作符或SELECT子句等表达式作为入参时(如SELECT
sum(abs(n)) FROM t;),聚合函数将获取不到入参表达式传递的精度信息,导致函数的结
果精度与MySQL有差异。
8.2.3.3.1 流程控制函数
8-55 流程控制函数列表
序号 MySQL数据库 GaussDB
数据库
差异
1 IF() 支持。 当第一个参数为TRUE且第三个参数表
达式中存在隐式类型转换错误,或者
第一个参数为FALSE且第二个参数表达
式中存在隐式类型转换错误时,
MySQL会忽略该错误,GaussDB会提
示类型转换错误。
2
IFNULL() 支持。 第一个参数不为NULL且第二个参数表
达式中存在隐式类型转换错误时,
MySQL会忽略该错误,GaussDB会提
示类型转换错误。
3
NULLIF() 支持,有
差异。
函数返回值类型在MySQL5.7
MySQL8.0中存在差异,考虑到
MySQL8.0更合理,因此函数返回值类
型兼容MySQL8.0
8.2.3.3.2 日期和时间函数
以下为GaussDB M-Compatibility兼容性日期时间函数公共说明。
M-Compatibility开发指南》中“函数和操作符”章节函数入参为时间类型表达式的情况:
时间类型表达式主要包括TEXTDATETIMEDATETIME,但所有可以隐式转换为时间表
达式的类型都可以作为入参,比如数字类型可以通过先隐式转化为TEXT,再作为时间类型表
达式生效。
生效的情况根据函数有所不同,比如:DATEDIFF函数由于只计算日期的差值,所以时间表
达式会当做日期来解析。TIMESTAMPDIFF函数由于计算时间差值时是根据UNIT来决定的,
所以会根据UNIT选择将时间表达式当做DATE或者TIME或者DATETIME来解析。
函数入参为无效日期的情况:
一般而言,日期时间函数支持DATEDATETIME的范围和MySQL保持一致。DATE支持的范
围为'0000-01-01''9999-12-31'DATETIME支持的范围为'0000-01-01 00:00:00'
'9999-12-31 23:59:59'。虽然GaussDB支持的DATEDATETIME范围大于MySQL,但是越界
仍然算无效日期。
大部分时间函数会告警并返回NULL,只有能通过cast正常转换的日期,才是正常合理的日期。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 450
新框架下GaussDB的大部分日期时间函数与MySQL一致,一些函数的差异如下表所
示:
8-56 日期与和时间函数列表
MySQL数据库 GaussD
B数据库
差异
1 ADDDATE() 支持 -
2 ADDTIME() 支持 -
3 CONVERT_TZ() 支持 -
4 CURDATE() 支持 -
5 CURRENT_DATE()/
CURRENT_DATE
支持 -
6 CURRENT_TIME()/
CURRENT_TIME
支持,
有差异
MySQL入参整型值会按照一字节最大值
255整数回绕(例:SELECT
CURRENT_TIME(257) == SELECT
CURRENT_TIME(1))。
GaussDB只支持[0,6]合法值,其他值报
错。
7 CURRENT_TIMESTAMP(
)/
CURRENT_TIMESTAMP
支持,
有差异
MySQL入参整型值会按照一字节最大值
255整数回绕(例:SELECT
CURRENT_TIMESTAMP(257) ==
SELECT CURRENT_TIMESTAMP(1))。
GaussDB只支持[0,6]合法值,其他值报
错。
8 CURTIME() 支持,
有差异
MySQL入参整型值会按照一字节最大值
255整数回绕(例:SELECT
CURTIME(257) == SELECT
CURTIME(1))。
GaussDB只支持[0,6]合法值,其他值报
错。
9 DATE() 支持 -
10 DATE_ADD() 支持 -
11 DATE_FORMAT() 支持 -
12 DATE_SUB() 支持 -
13 DATEDIFF() 支持 -
14 DAY() 支持 -
15 DAYNAME() 支持 -
16 DAYOFMONTH() 支持 -
17 DAYOFWEEK() 支持 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 451
MySQL数据库 GaussD
B数据库
差异
18 DAYOFYEAR() 支持 -
19 EXTRACT() 支持 -
20 FROM_DAYS() 支持 -
21 FROM_UNIXTIME() 支持 -
22 GET_FORMAT() 支持 -
23 HOUR() 支持 -
24 LAST_DAY() 支持 -
25 LOCALTIME()/
LOCALTIME
支持,
有差异
MySQL入参整型值会按照一字节最大值
255整数回绕(例SELECT
LOCALTIME(257) == SELECT
LOCALTIME(1))。
GaussDB只支持[0,6]合法值,其他值报
错。
26 LOCALTIMESTAMP/
LOCALTIMESTAMP()
支持,
有差异
MySQL入参整型值会按照一字节最大值
255整数回绕(例SELECT
LOCALTIMESTAMP(257) == SELECT
LOCALTIMESTAMP(1))。
GaussDB只支持[0,6]合法值,其他值报
错。
27 MAKEDATE() 支持 -
28 MAKETIME() 支持 -
29 MICROSECOND() 支持 -
30 MINUTE() 支持 -
31 MONTH() 支持 -
32 MONTHNAME() 支持 -
33 NOW() 支持,
有差异
MySQL入参整型值会按照一字节最大值
255整数回绕(例SELECT
NOW(257)==SELECT NOW(1))。
GaussDB只支持[0,6]合法值,其他值报
错。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 452
MySQL数据库 GaussD
B数据库
差异
34 PERIOD_ADD() 支持,
有差异
1. 整数溢出处理的行为。
MySQL5.7版本,此函数入参结果
最大值为2^32=4294967296,在入参
或结果的period对应的月份累加值以
month_number超过uint32范围时
存在整数回绕问题;在MySQL8.0
已修复此问题,对越界月份报错。
GaussDB下此函数的表现与
MySQL8.0版本保持一致。
2. 负数period的表现。
MySQL5.7版本,会将负数年份解
析为异常值而不是报错。GaussDB
参或结果(如1001月减去10000
月)出现负数时报错。在MySQL8.0
中已修复此问题,对越界月份报错。
GaussDB下此函数的表现与
MySQL8.0版本保持一致。
3. period月份越界的表现。
MySQL5.7版本中,若月份大于12
或等于0,例如200013199900,会
将其顺延到之后的年份,或者将0
作为上一年12月处理。在MySQL8.0
中已修复此问题,对越界月份报错。
GaussDB下此函数的表现与
MySQL8.0版本保持一致。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 453
MySQL数据库 GaussD
B数据库
差异
35 PERIOD_DIFF() 支持,
有差异
1. 整数溢出处理的行为。
MySQL5.7版本,此函数入参结果
最大值为2^32=4294967296,在入参
或结果的period对应的月份累加值以
month_number超过uint32范围时
存在整数回绕问题;在MySQL8.0
已修复此问题,对越界月份报错。
GaussDB下此函数的表现与
MySQL8.0版本保持一致。
2. 负数period的表现。
MySQL5.7版本,会将负数年份解
析为异常值而不是报错。GaussDB
参或结果(如1001月减去10000
月)出现负数时报错。在MySQL8.0
中已修复此问题,对越界月份报错。
GaussDB下此函数的表现与
MySQL8.0版本保持一致。
3. period月份越界的表现。
MySQL5.7版本中,若月份大于12
或等于0,例如200013199900,会
将其顺延到之后的年份,或者将0
作为上一年12月处理。在MySQL8.0
中已修复此问题,对越界月份报错。
GaussDB下此函数的表现与
MySQL8.0版本保持一致。
36
QUARTER() 支持 -
37 SEC_TO_TIME() 支持 -
38 SECOND() 支持 -
39 STR_TO_DATE() 支持 返回值与MySQL有差异,GaussDB返回
的是textMySQL返回的是datetime
date
40
SUBDATE() 支持 -
41 SUBTIME() 支持 -
42 SYSDATE() 支持,
有差异
MySQL入参整型值会按照一字节最大值
255整数回绕。
GaussDB不回绕。
43
TIME() 支持 -
44 TIME_FORMAT() 支持 -
45 TIME_TO_SEC() 支持 -
46 TIMEDIFF() 支持 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 454
MySQL数据库 GaussD
B数据库
差异
47 TIMESTAMP() 支持 -
48 TIMESTAMPADD() 支持 -
49 TIMESTAMPDIFF() 支持 -
50 TO_DAYS() 支持 -
51 TO_SECONDS() 支持 -
52 UNIX_TIMESTAMP() 支持 MySQL会根据入参是否存在小数位,决
定返回定点型还是整型。当前GaussDB
在内层嵌套操作符或函数时,返回的类
型与MySQL可能存在不同。当内层节点
返回定点、浮点、字符型、时间类型
(不包括DATE类型)时,MySQL可能返
回整型,GaussDB会返回定点型。
53 UTC_DATE() 支持 -
54 UTC_TIME() 支持,
有差异
MySQL入参整型值会按照一字节最大值
255整数回绕,GaussDB只支持[0,6]
法值,其他值报错。
55
UTC_TIMESTAMP() 支持,
有差异
MySQL入参整型值会按照一字节最大值
255整数回绕,GaussDB只支持[0,6]
法值,其他值报错。
56
WEEK() 支持 -
57 WEEKDAY() 支持 -
58 WEEKOFYEAR() 支持 -
59 YEAR() 支持 -
60 YEARWEEK() 支持 -
8.2.3.3.3 字符串函数
8-57 字符串函数列表
MySQL数据库 GaussDB
据库
差异
1 ASCII() 支持。 -
2 BIT_LENGTH() 支持。 -
3 CHAR_LENGTH(
)
支持,有差
异。
GaussDB此函数如果数据库字符集是
SQL_ASCIICHAR_LENGTH()会返回字节
数而非字符数。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 455
MySQL数据库 GaussDB
据库
差异
4 CHARACTER_LE
NGTH()
支持,有差
异。
GaussDB此函数如果数据库字符集是
SQL_ASCIICHARACTER_LENGTH()会返
回字节数而非字符数。
5
CONCAT() 支持。 MySQL返回值类型为二进制字符串类型
BINARYVARBINARYBLOB等)时,
GaussDB对应的返回值类型为
LONGBLOB;当MySQL返回值类型为非二
进制字符串类型(CHARVARCHAR
TEXT等)时,GaussDB对应的返回值类型
TEXT
6 CONCAT_WS() 支持。 MySQL返回值类型为二进制字符串类型
BINARYVARBINARYBLOB等)时,
GaussDB对应的返回值类型为
LONGBLOB;当MySQL返回值类型为非二
进制字符串类型(CHARVARCHAR
TEXT等)时,GaussDB对应的返回值类型
TEXT
7 HEX() 支持。 -
8 LENGTH() 支持。 -
9 LPAD() 支持,有差
异。
MySQL默认最大填充长度为1398101
GaussDB默认最大长度为1048576。在
不同字符集下,最大填充长度会有差
异,例如字符集为'GBK'时,GaussDB
认最大长度为2097152
如果数据库字符集是SQL_ASCII,可能
产生未预期的结果。
MySQL返回值类型为二进制字符串类
型(BINARYVARBINARYBLOB等)
时,GaussDB对应的返回值类型为
LONGBLOB;当MySQL返回值类型为非
二进制字符串类型(CHAR
VARCHARTEXT等)时,GaussDB
应的返回值类型为TEXT
10 REPEAT() 支持。 MySQL返回值类型为二进制字符串类型
BINARYVARBINARYBLOB等)时,
GaussDB对应的返回值类型为
LONGBLOB;当MySQL返回值类型为非二
进制字符串类型(CHARVARCHAR
TEXT等)时,GaussDB对应的返回值类型
TEXT
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 456
MySQL数据库 GaussDB
据库
差异
11 REPLACE() 支持。 MySQL返回值类型为二进制字符串类型
BINARYVARBINARYBLOB等)时,
GaussDB对应的返回值类型为
LONGBLOB;当MySQL返回值类型为非二
进制字符串类型(CHARVARCHAR
TEXT等)时,GaussDB对应的返回值类型
TEXT
12 RPAD() 支持,有差
异。
MySQL默认最大填充长度为1398101
GaussDB默认最大长度为1048576。在
不同字符集下,最大填充长度会有差
异,例如字符集为'GBK'时,GaussDB
认最大长度为2097152
如果数据库字符集是SQL_ASCII,可能
产生未预期的结果。
MySQL返回值类型为二进制字符串类
型(BINARYVARBINARYBLOB等)
时,GaussDB对应的返回值类型为
LONGBLOB;当MySQL返回值类型为非
二进制字符串类型(CHAR
VARCHARTEXT等)时,GaussDB
应的返回值类型为TEXT
13 SPACE() 支持。 -
14 STRCMP() 支持,有差
异。
如果数据库字符集是SQL_ASCII,可能产生
未预期的结果。
15 FIND_IN_SET() 支持,有差
异。
当指定数据库使用的字符编码是SQL_ASCII
时,服务器把字节值0~127根据ASCII标准
解释,而字节值128~255则当作无法解析
的字符;如果该函数的输入输出包含了任
何非ASCII数据,数据库将无法帮助你转换
或者校验非ASCII字符。
MySQL返回值类型为二进制字符串类型
BINARYVARBINARYBLOB等)时,
GaussDB对应的返回值类型为
LONGBLOB;当MySQL返回值类型为非二
进制字符串类型(CHARVARCHAR
TEXT等)时,GaussDB对应的返回值类型
TEXT
16 LCASE()
17 LEFT()
18 LOWER()
19 LTRIM()
20 REVERSE()
21 RIGHT()
22 RTRIM()
23 SUBSTR()
24 SUBSTRING()
25 SUBSTRING_IN
DEX()
26 TRIM()
27 UCASE()
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 457
MySQL数据库 GaussDB
据库
差异
28 UPPER()
29 UNHEX() 支持。 MySQL的返回值类型为BINARY
VARBINARYBLOBMEDIUMBLOB
LONGBLOBGaussDB返回值类型固定为
LONGBLOB
30
FIELD() 支持。 -
8.2.3.3.4 强制转换函数
8-58 强制转换函数列表
序号 MySQL数据
GaussDB数据
差异
1 CAST() 支持
GaussDB不支持使用CAST(expr AS
CHAR[(N)] charset_info或者
CAST(expr AS NCHAR[(N)])转换字符
集。
GaussDB不支持使用CAST(expr AS
JSON)将表达式转换为JSON
GaussDB支持使用CAST(expr AS
FLOAT[(p)])CAST(expr AS DOUBLE)
将表达式转换为浮点类型,MySQL 5.7
版本不支持此转换。
2 CONVERT() 支持
GaussDB不支持使用CONVERT(expr,
CHAR[(N)] charset_info或者
CAST(expr, NCHAR[(N)])转换字符集。
GaussDB不支持使用CAST(expr, JSON)
将表达式转换为JSON
GaussDB支持使用CONVERT(expr,
FLOAT[(p)])CONVERT(expr,
DOUBLE)将表达式转换为浮点类型,
MySQL 5.7版本不支持此转换。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 458
8.2.3.3.5 加密函数
8-59 加密函数列表
序号
MySQL数据库 GaussDB
数据库
差异
1 AES_DECRYPT() 支持 1. ecb为不安全加密模
式,GaussDB不支持,
默认为cbc模式。
2. GaussDB中,当指定数
据库使用的字符编码是
SQL_ASCII时,服务器
把字节值0-127根据
ASCII标准解释,而字节
128-255则当作无法
解析的字符;如果该函
数的输入输出包含了任
何非ASCII数据,数据库
将无法帮助你转换或者
校验非ASCII字符。
3. MySQL的返回值类型为
BINARY
VARBINARYBLOB
MEDIUMBLOB
LONGBLOBGaussDB
返回值类型固定为
LONGBLOB
2
AES_ENCRYPT() 支持
3 SHA()/SHA1() 支持 -
4 SHA2() 支持 -
8.2.3.3.6 比较函数
8-60 比较函数列表
序号
MySQ数据库 GaussDB
据库
差异
1 COALESCE() 支持,有差
异。
union distinct场景下,返
回值精度与MySQL不完全
一致。
当第一个不为NULL的参
数的后续参数表达式中存
在隐式类型转换错误时,
MySQL会忽略该错误,
GaussDB会提示类型转换
错误。
2 INTERVAL() 支持。 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 459
序号 MySQ数据库 GaussDB
据库
差异
3 GREATEST() 支持,有差
异。
MySQL返回值类型为二
进制字符串类型
BINARY
VARBINARYBLOB等)
时,GaussDB对应的返回
值类型为LONGBLOB;当
MySQL返回值类型为非二
进制字符串类型
CHARVARCHAR
TEXT等)时,GaussDB
对应的返回值类型为
TEXT
当该函数入参含有NULL
且在WHERE关键字之后
调用,返回结果与
MySQL5.7不一致,此处
MySQL5.7存在的问
题,MySQL8.0修复了该
问题,目前GaussDB
MySQL8.0保持一致。
4 LEAST() 支持,有差
异。
MySQL返回值类型为二
进制字符串类型
BINARY
VARBINARYBLOB等)
时,GaussDB对应的返回
值类型为LONGBLOB;当
MySQL返回值类型为非二
进制字符串类型
CHARVARCHAR
TEXT等)时,GaussDB
对应的返回值类型为
TEXT
当该函数入参含有NULL
且在WHERE关键字之后
调用,返回结果与
MySQL5.7不一致,此处
MySQL5.7存在的问
题,MySQL8.0修复了该
问题,目前GaussDB
MySQL8.0保持一致。
5 ISNULL() 支持。 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 460
8.2.3.3.7 聚合函数
8-61 聚合函数列表
MySQL数据库 GaussDB数据库 差异
1 AVG() 支持,有差异
GaussDB中指定DINSTINCT
SQL语句包含GROUP BY子句
时,不保证结果的顺序。
GaussDB中当expr中的列为
BITBOOL、整数类型,且所
有行的和超过BIGINT的范围
时,会发生溢出导致整数翻
转。
2 BIT_AND() 支持 -
3 BIT_OR() 支持 -
4 BIT_XOR() 支持 -
5 COUNT() 支持,有差异 GaussDB中指定DINSTINCTSQL
语句包含GROUP BY子句时,不保
证结果的顺序。
6
GROUP_CONCAT() 支持,有差异
GaussDB中指定DINSTINCT
SQL语句包含GROUP BY子句
时,不保证结果的顺序。
GaussDB中当
GROUP_CONCAT参数中同时
DISTINCTORDER BY语法
时,所有ORDER BY后的表达式
必须也在DISTINCT的表达式之
中。
GaussDB
GROUP_CONCAT(... ORDER
BY 数字)不代表按照第几个参
数的顺序,数字只是一个常量
表达式,相当于不排序。
GaussDB中使用参数
group_concat_max_len限制
GROUP_CONCAT最大返回长
度,超长截断,目前能返回的
最大长度是1073741823,小于
MySQL
7 MAX() 支持,有差异 GaussDB中指定DINSTINCTSQL
语句包含GROUP BY子句时,不保
证结果的顺序。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 461
MySQL数据库 GaussDB数据库 差异
8 MIN() 支持,有差异 GaussDB中指定DINSTINCTSQL
语句包含GROUP BY子句时,不保
证结果的顺序。
9
SUM() 支持,有差异
GaussDB中指定DINSTINCT
SQL语句包含GROUP BY子句
时,不保证结果的顺序。
GaussDB中当expr中的列为
BITBOOL、整数类型,且所
有行的和超过BIGINT的范围
时,会发生溢出导致整数翻
转。
8.2.3.3.8 数字操作函数
8-62 数字操作函数列表
序号
MySQL数据库 GaussDB数据
差异
1 ABS() 支持。 -
2 ACOS() 支持。 -
3 ASIN() 支持。 -
4 ATAN() 支持。 -
5 ATAN2() 支持。 -
6 CEILING() 支持。 -
7 COS() 支持。 -
8 DEGREES() 支持。 -
9 EXP() 支持。 -
10 FLOOR() 支持,有差
异。
FLOOR函数的返回值类型与
MySQL的有差异:入参类型为
INTGaussDB返回值类型为
BIGINTMySQL返回值类型为
INT
11
LN() 支持。 -
12 LOG() 支持。 -
13 LOG10() 支持。 -
14 LOG2() 支持。 -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 462
序号 MySQL数据库 GaussDB数据
差异
15 PI() 支持。 PI函数的返回值精度与MySQL的有
差异:MySQLPI函数的结果仅保
留四舍五入之后的小数后6位,而
GaussDB的结果会保留四舍五入之
后的小数后15位。
16
POW() 支持。 -
17 POWER() 支持。 -
18 RAND() 支持。 -
19 SIGN() 支持。 -
20 SIN() 支持。 -
21 SQRT() 支持。 -
22 TAN() 支持。 -
23 TRUNCATE() 支持。 -
8.2.3.3.9 其他函数
8-63 其他函数列表
序号
MySQL数据库 GaussDB数据库 差异
1 DATABASE() 支持 -
2 UUID() 支持 -
3 UUID_SHORT() 支持 -
8.2.3.4 操作符
GaussDB数据库兼容绝大多数MySQL的操作符,但存在部分差异。如未列出,操作符
行为默认为GaussDB原生行为,目前存在MySQL不支持但是GaussDB支持的语句,不
建议使用这类语句。
操作符差异
ORDER BY排序对NULL值处理的差异。MySQL在排序时会将NULL值排序在前
面;GaussDB默认将NULL值默认排在最后面。GaussDB可以通过nulls rst
nulls last设置NULL值排序顺序。
ORDER BY时,GaussDB输出顺序与MySQL一致。没有ORDER BY时,GaussDB
不保证结果有序。
MySQL操作符要使用括号来保证表达的结合性与优先级无误,否则执行报错。例
如:SELECT 1 regexp ('12345' regexp '123');
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 463
GaussDB操作符可以接受不用括号严格表述的表达式,也能成功执行。
NULL值显示不同。MySQL会将NULL显示为“NULL”;GaussDBNULL值显示
为空值。
MySQL输出结果:
mysql> Select NULL;
+------+
| NULL |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
GaussDB输出结果:
m_db=# select NULL;
?column?
----------
(1 row)
操作符执行后,列名显示不一致。MySQL会将NULL显示为“NULL”;GaussDB
NULL值显示为空值。
字符串转double遇到非法字符串时,告警信息不一致。MySQL在常量非法字符串
报错,字段非法字符串不报错;GaussDB在常量非法字符串和字段非法字符串都
报错。
比较操作符返回结果显示不同。MySQL返回1/0GaussDB返回t/f
8-64 操作符
序号
MySQL数据库 GaussDB数据库 差异
1 <> 支持,但有差异。 MySQL支持索引,
GaussDB不支持索引。
2 <=> 支持,但有差异。 MySQL支持索引,
GaussDB不支持索引、
hash连接和合并连接。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 464
序号 MySQL数据库 GaussDB数据库 差异
3 行表达式 支持,但有差异。
MySQL支持<=>操作符
行比较、GaussDB不支
<=>操作符行比较。
MySQL不支持行表达式
NULL比较。GaussDB
支持<<==>=
><>操作符对行表达
式与NULL值比较。
MySQL不支持IS
NULLISNULL对行表
达式的操作。GaussDB
支持。
操作符对于行表达式的
不支持的操作,
GaussDB错误信息与
MySQL不一致。
MySQL不支持
ROW(values)其中
values只有一列数据,
GaussDB支持。
GaussDB
m_db=# SELECT (1,2) <=>
row(2,3);
ERROR: could not determine
interpretation of row comparison
operator <=>
LINE 1: select (1,2) <=> row(2,3);
^
HINT: unsupported operator.
m_db=# SELECT (1,2) < NULL;
?column?
----------
(1 row)
m_db=# SELECT (1,2) <> NULL;
?column?
----------
(1 row)
m_db=# SELECT (1, 2) IS NULL;
?column?
----------
f
(1 row)
m_db=# SELECT ISNULL((1, 2));
?column?
----------
f
(1 row)
m_db=# SELECT ROW(0,0)
BETWEEN ROW(1,1) AND
ROW(2,2);
ERROR: un support type
m_db=# SELECT ROW(NULL) AS
x;
x
----
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 465
序号 MySQL数据库 GaussDB数据库 差异
()
(1 row)
MySQL:
mysql> SELECT (1,2) <=>
row(2,3);
+--------------------+
| (1,2) <=> row(2,3) |
+--------------------+
| 0 |
+--------------------+
1 row in set (0.00 sec)
mysql> SELECT (1,2) < NULL;
ERROR 1241 (21000): Operand
should contain 2 column(s)
mysql> SELECT (1,2) <> NULL;
ERROR 1241 (21000): Operand
should contain 2 column(s)
mysql> SELECT (1, 2) IS NULL;
ERROR 1241 (21000): Operand
should contain 1 column(s)
mysql> SELECT ISNULL((1, 2));
ERROR 1241 (21000): Operand
should contain 1 column(s)
mysql> SELECT NULL BETWEEN
NULL AND ROW(2,2);
ERROR 1241 (21000): Operand
should contain 1 column(s)
mysql> SELECT ROW(NULL) AS x;
ERROR 1064 (42000): You have
an error in your SQL syntax;
check the manual that
corresponds to your MySQL
server version for the right syntax
to use near ') as x' at line 1
4
-- 支持。 MySQL表示对一个操作数
进行两次取反,结果等于
原操作数;GaussDB表示
注释。
5
!! 支持,但有差异。 MySQL!!含义同!,表示
取非。
GaussDB!表示取非操
作,当!!中间存在空格
时,表示连续两次取非
! !);当!!中间没有空
格时,表示阶乘(!!)。
说明
GaussDB中,当同时使用
阶乘(!!)和取非(!
时,阶乘(!!)和取非
!)中间需要添加空格,
否则会报错。
GaussDB中,当需要多次
取非操作时,!!之间需
使用空格隔开。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 466
序号 MySQL数据库 GaussDB数据库 差异
6 [NOT] REGEXP 支持,但有差异。
GaussDBMySQL在正
则表达式中支持的元字
符有所不同。例如,
GaussDB支持“\d”表
示数字,“\w”表示字
母、数字和下划线,
\s”表示空格,而
MySQL不支持这些元字
符,MySQL会把这些字
符当成正常字符串。
GaussDB '\b' 可以与'\
\b'匹配,MySQL匹配失
败。
GaussDB新框架下中使
用“\”表示转义字符,
MySQL中使用“\
\”。
MySQL不支持2个操作
符连在一起使用。
模式字符串pat非法入
参,只存在右单括
号’)’时,GaussDB
据库报错。MySQL存在
bug,后续版本已经修
复此问题。
de|abc匹配序列de
abc的匹配规则,当|
右存在空值时,MySQL
存在bug,会报错,后
续版本已经修复此问
题。
空白字符[\t]正则匹配字
符类[:blank:]
GaussDB可匹配,
MySQL\t不能匹配
[:blank:]MySQL存在
bug,后续版本已经修
复此问题。
GaussDB支持非贪婪模
式匹配,即尽可能少的
匹配字符,在部分特殊
字符后加‘?’问号字
符,例如:“??, *?, +?,
{n}?, {n,}?, {n,m}?”。
MySQL 5.7版本不支持
非贪婪模式匹配,并报
错:Got error
'repetition-operator
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 467
序号 MySQL数据库 GaussDB数据库 差异
operand invalid' from
regexpMySQL 8.0
本已经支持。
binary字符集下,text
类型、blob类型均会转
换成bytea类型,由于
REGEXP操作符不支持
bytea类型,因此无法匹
配。
7 LIKE 支持,但有差异。 MySQLLIKE的左操作数
只能是位运算或者算术运
算或者由括号组成的表达
式,LIKE的右操作数只能是
单目运算符(不含NOT)或者
括号组成的表达式。
GaussDBLIKE的左右操作
数可以是任意表达式。
8 [NOT]
BETWEEN AND
支持,但有差异。 MySQL[NOT]
BETWEEN AND嵌套使用
时从右到左结合。[NOT]
BETWEEN AND的第1个操
作数和第2个操作数只能是
位运算或者算术运算或者
由括号组成的表达式。
GaussDB[NOT]
BETWEEN AND嵌套使用
时从左到右结合。[NOT]
BETWEEN AND的第1个操
作数和第2个操作数可以是
任意表达式。
9 IN 支持,但有差异。 MySQLIN的左操作数只
能是位运算或者算术运算
或者由括号组成的表达
式。
GaussDBIN的左操作数
可以是任意表达式。
10 支持,但有差异。 MySQL!的操作数只能是
单目运算符(不含not)或者
括号组成的表达式。
GaussDB!的操作数可以
是任意表达式。
11
# 不支持。 MySQL支持#注释,
GaussDB不支持#注释。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 468
8-65 操作符组合存在差异
操作符组合示例 MySQL
数据库
GaussD
B数据库
说明
SELECT 1 LIKE 3 & 1; 不支持 支持 LIKE的右操作数不能是位运算符组
成的表达式。
SELECT 1 LIKE 1 +1; 不支持 支持 LIKE的右操作数不能是算术运算符
组成的表达式。
SELECT 1 LIKE NOT 0; 不支持 支持 LIKE的右操作数只能是+-!
单目操作符或者括号组成的表达
式,NOT除外。
SELECT 1 BETWEEN 1
AND 2 BETWEEN 2
AND 3;
从右到
左结合
从左到
右结合
建议加上括号明确优先级。
SELECT 2 BETWEEN
1=1 AND 3;
不支持 支持 BETWEEN的第2个操作数不能是
比较操作符组成的表达式。
SELECT 0 LIKE 0
BETWEEN 1 AND 2;
不支持 支持 BETWEEN的第1个操作数不能是
模式匹配操作符组成的表达式。
SELECT 1 IN (1)
BETWEEN 0 AND 3;
不支持 支持 BETWEEN的第1个操作数不能是
IN操作符组成的表达式。
SELECT 1 IN (1) IN (1); 不支持 支持 2IN表达式左操作数不能是IN
组成的表达式。
SELECT ! NOT 1; 不支持 支持 !的操作数只能是+-!等单目操
作符或者括号组成的表达式,
NOT除外。
Gauss中支持,但在MySQL中不支持的操作符组合不建议使用。建议按照MySQL中的使用规
则对操作符进行组合使用。
索引差异
GaussDB当前仅支持UBTreeB-tree索引。
针对模糊匹配(LIKE操作符),MySQL创建默认索引可以走索引;GaussDB默认
的索引不走索引,需要用户使用以下语法指定opclass,比如指定为
text_pattern_opsLIKE操作符才可以走索引。
CREATE INDEX indexname ON tablename(col [opclass]);
B-tree/UBTree索引场景保持原生GaussDB原有逻辑,即同一操作符族内的类型比
较,支持索引扫描,其余索引类型暂未支持。
where子句中,索引字段类型和常量类型操作场景下,GaussDB中索引与MySQL
索引支持存在差异,如下表所示。例如以下语句GaussDB不支持索引:
create table t(_int int);
create index idx on t(_int) using BTREE;
select * from t where _int > 2.0;
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 469
where子句里索引字段类型和常量类型操作场景中,可以使用cast函数将常数类型显示转为
字段类型,以便实现索引。
select * from t where _int > cast(2.0 as signed);
8-66 索引支持存在差异
索引字段类型 常量类型 GaussDB MySQL
整型 整型
浮点型 浮点型
定点型 定点型
字符串类型 字符串类型
二进制类型 二进制类型
带日期的时间类
带日期的时间类
TIME类型 TIME类型
带日期的时间类
可转为带日期的
时间类型(如
20231130等整
型)
带日期的时间类
TIME类型
TIME类型 可转为TIME类型
的常量(如
203008等整型)
浮点型 整型
浮点型 定点型
浮点型 字符串类型
浮点型 二进制类型
浮点型 带日期的时间类
浮点型 TIME类型
定点型 整型
字符串类型 带日期的时间类
字符串类型 TIME类型
二进制类型 字符串类型
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 470
索引字段类型 常量类型 GaussDB MySQL
二进制类型 带日期的时间类
二进制类型 TIME类型
整型 浮点型
整型 定点型
整型 字符串类型
整型 二进制类型
整型 带日期的时间类
整型 TIME类型
定点型 浮点型
定点型 字符串类型
定点型 二进制类型
定点型 带日期的时间类
定点型 TIME类型
字符串类型 二进制类型
带日期的时间类
整型(不可转为
带日期的时间类
型)
带日期的时间类
浮点型(不可转
为带日期的时间
类型)
带日期的时间类
定点型(不可转
为带日期的时间
类型)
TIME类型 整型(不可转为
TIME类型)
TIME类型 字符串类型(不
可转为TIME
型)
TIME类型 二进制类型(不
可转为TIME
型)
TIME类型 带日期的时间类
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 471
8-67 是否支持走索引
索引字段类型
常量类型 是否走索引 MySQL
字符串类型 整型
字符串类型 浮点型
字符串类型 定点型
二进制类型 整型
二进制类型 浮点型
二进制类型 定点型
带日期的时间类
字符串类型(不
可转为带日期的
时间类型)
带日期的时间类
二进制类型(不
可转为带日期的
时间类型)
TIME类型 浮点型(不可转
TIME类型)
TIME类型 定点型(不可转
TIME类型)
8.2.3.5 字符集
GaussDB数据库支持指定数据库、模式、表或列的字符集,支持的范围如下。
8-68 字符集列表
序号
MySQL数据库 GaussDB数据库
1 utf8mb4 支持
2 utf8 支持
3 gbk 支持
4 gb18030 支持
5 binary 支持
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 472
utf8utf8mb4GaussDB中为同一个字符集,编码最大长度为4字节。由此可导致如下差
异:当前字符串字符集为utf8,指定其字符序为utf8mb4_bin/utf8mb4_general_ci/
utf8mb4_unicode_ci/utf8mb4_0900_ai_ci时(例如select _utf8'a' collate utf8mb4_bin),
MySQL报错,GaussDB不报错。当字符串字符集为utf8mb4,指定其字符序为utf8_bin/
utf8_general_ci/utf8_unicode_ci时也存在同样差异。
词法语法解析按照字节流解析,当多字节字符中包含与'\', '\'', '\\'等符号一致的编码时,会导
致与mysql行为不一致,建议暂时关闭转义符开关进行规避。
8.2.3.6 排序规则
GaussDB数据库支持指定模式、表或列的排序规则,支持的范围如下。
排序规则差异说明:
当前仅有字符串类型、部分二进制类型支持指定排序规则,其他类型不支持指定排序规则,
可以通过查询pg_type系统表中类型的typcollation属性不为0来判断该类型支持字符序。
MySQL中所有类型可以指定字符序,但除字符串、二进制类型其他排序规则无实际意义。
当前排序规则(除binary外)仅支持在其对应字符集与库级字符集一致时可以指定,
GaussDB数据库中,字符集必须与数据库的字符集一致,且不支持表内多种字符集混合使
用。
utf8mb4字符集下默认字符序为utf8mb4_general_ci,与MySQL5.7保持一致。
8-69 排序规则列表
序号
MySQL数据库 GaussDB数据库
1 utf8mb4_general_ci 支持
2 utf8mb4_unicode_ci 支持
3 utf8mb4_bin 支持
4 gbk_chinese_ci 支持
5 gbk_bin 支持
6 gb18030_chinese_ci 支持
7 gb18030_bin 支持
8 binary 支持
9 utf8mb4_0900_ai_ci 支持
10 utf8_general_ci 支持
11 utf8_bin 支持
12 utf8_unicode_ci 支持
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 473
8.2.3.7 事务
GaussDB数据库兼容MySQL的事务,但存在部分差异。本章节介绍GaussDBM-
Compatibility数据库中事务相关的差异。
事务默认隔离级别
M-Compatibility默认隔离级别为READ COMMITTEDMySQL默认隔离级别为
REPEATABLE-READ
-- 查看当前事务隔离级别。
m_db=# SHOW transaction_isolation;
子事务
M-Compatibility中,通过SAVEPOINT用于在当前事务里建立一个新的保存点(子事
务),使用ROLLBACK TO SAVEPOINT回滚到一个保存点(子事务),子事务回滚后
父事务可以继续运行,子事务的回滚不影响父事务的事务状态。
MySQL不存在创建保存点(子事务)。
嵌套事务
嵌套事务指在事务块中开启新事务。
M-Compatibility中,正常事务块中开启新事务会警告存在一个进行中的事务,忽略开
启命令;异常事务块中开启新事务将报错,必须在执行ROLLBACK/COMMIT之后才可
以执行,执行ROLLBACK/COMMIT会回滚之前语句。
MySQL中,正常事务块中开启新事务会先把之前事务提交,然后开启新事务;异常事
务块中开启新事务会忽略错误,提交之前无错误的语句并开启新事务。
-- M-Compatibility正常事务块中,开启新事务会警告并忽略。
m_db=# DROP TABLE IF EXISTS test_t;
m_db=# CREATE TABLE test_t(a int, b int);
m_db=# BEGIN;
m_db=# INSERT INTO test_t values(1, 2);
m_db=# BEGIN; -- 会警告there is already a transaction in progress
m_db=# SELECT * FROM test_t ORDER BY 1;
m_db=# COMMIT;
-- M-Compatibility异常事务块中,开启新事务会报错,必须ROLLBACK/COMMIT之后才可以执行。
m_db=# BEGIN;
m_db=# ERROR sql; -- 错误语句。
m_db=# BEGIN; -- 报错。
m_db=# COMMIT; -- ROLLBACK/COMMIT之后才可以执行。
隐式提交的语句
M-Compatibility使用GaussDB存储,继承GaussDB事务机制,事务中执行DDLDCL
不会自动提交。
MySQLDDLDCL、管理类语句,锁相关语句会自动提交。
-- M-Compatibility创建表和设置GUC参数可以回滚掉。
m_db=# DROP TABLE IF EXISTS test_table_rollback;
m_db=# BEGIN;
m_db=# CREATE TABLE test_table_rollback(a int, b int);
m_db=# \d test_table_rollback;
m_db=# ROLLBACK;
m_db=# \d test_table_rollback; -- 不存在该表。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 474
SET TRANSACTION 差异
M-Compatibility中,SET TRANSACTION同时设置多次隔离级别/事务访问模式时,只
有最后一个会生效;多个事务特性支持使用空格和逗号分割。
MySQLSET TRANSACTION不允许设置多次隔离级别/事务访问模式;多个事务特性
只支持使用逗号分割。
8-70 SET TRANSACTION 差异
序号 语法 功能 差异
1 SET
TRANSACTIO
N
设置事务特性。
M-Compatibility中,SET
TRANSACTION在会话级别生效;
MySQLSET TRANSACTION在下一个
事务生效。
2
SET SESSION
TRANSACTIO
N
设置会话级事务特
性。
-
3 SET GLOBAL
TRANSACTIO
N
设置全局会话级事
务特性,该特性适
用于后续会话,对
当前会话无影响。
M-Compatibility中,GLOBAL是全局会
话级别生效,只针对当前数据库实例,
其它数据库不影响。
MySQL中,会使所有数据库生效。
-- SET TRANSACTION会话级生效。
m_db=# SET TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE;
m_db=# SHOW transaction_isolation;
m_db=# SHOW transaction_read_only;
-- M-Compatibility同时设置多次隔离级别/事务访问模式,最后一个生效。
m_db=# SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED, ISOLATION LEVEL
REPEATABLE READ, READ WRITE, READ ONLY;
m_db=# SHOW transaction_isolation; -- repeatable read
m_db=# SHOW transaction_read_only; -- on
START TRANSACTION 差异
M-Compatibility中,START TRANSACTION开启事务时,同时支持设置隔离级别;同
时设置多次隔离级别/事务访问模式时,只有最后一个会生效;当前版本不支持立即开
启一致性快照;多个事务特性支持空格和逗号分割。
MySQLstart transaction 开启事务时,不支持设置隔离级别,不支持设置多次事务
访问模式;多个事务特性只支持逗号分割。
-- 开启事务设置隔离级别。
m_db=# START TRANSACTION ISOLATION LEVEL READ COMMITTED;
m_db=# COMMIT;
-- 多次设置访问模式。
m_db=# START TRANSACTION READ ONLY, READ WRITE;
m_db=# COMMIT;
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 475
事务相关的 GUC 参数
8-71 事务相关的 GUC 参数差异
序号
GUC参数 功能 差异
1 autocomm
it
设置事务自
动提交模
式。
M-Compatibility中当前版本不支持SET
autocommit = o
2 transactio
n_isolation
M-
Compatibili
ty中是设置
当前事务的
隔离级别。
MySQL
是设置会话
级事务的隔
离级别。
1. M-Compatibility中,通过使用SET命令,
只能改变当前事务的隔离级别。如果想要改
变会话级的隔离级别,可以使用
default_transaction_isolation
MySQL中,通过使用SET命令,可以改变
会话级的事务隔离级别。
2. 支持范围差异,M-Compatibility中当前版本
支持以下隔离级别设置,对大小写和空格敏
感:
READ COMMITTED
READ UNCOMMITTED
REPEATABLE READ
SERIALIZABLE
DEFAULT (设置和会话中默认隔离级别
一样)
MySQL中支持以下隔离级别设置,对大小写
不敏感,对空格敏感:
READ-UNCOMMITTED
READ-COMMITTED
REPEATABLE-READ
SERIALIZABLE
3. GaussDB中,新事务的
transaction_isolation值将被初始化为
default_transaction_isolation的值。
3
tx_isolatio
n
设置事务的
隔离级别;
tx_isolation
transaction_
isolation
同义词。
M-Compatibility中当前不支持。
4 default_tr
ansaction_
isolation
设置事务的
隔离级别。
M-Compatibility中通过SET设置会改变会话级事
务隔离级别。
MySQL中不支持该系统参数。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 476
序号 GUC参数 功能 差异
5 transactio
n_read_on
ly
设置事务的
访问模式。
1. M-Compatibility中,通过使用SET命令,
只能改变当前事务的访问模式。如果想要改
变会话级的访问模式,可以使用
default_transaction_read_only
MySQL中,通过使用SET命令,可以改变
会话级的事务隔离级别。
2. GaussDB中,新事务的
transaction_read_only值将被初始化为
default_transaction_read_only的值。
6 tx_read_o
nly
设置事务的
访问模式。
tx_read_onl
y
transaction_
read_only
同义词。
M-Compatibility中当前不支持。
7 default_tr
ansaction_
read_only
设置事务的
访问模式。
M-Compatibility中通过SET设置会改变会话级事
务访问模式;MySQL中不支持该系统参数。
8.2.3.8 SQL
GaussDB数据库兼容绝大多数MySQL语法,但存在部分差异。本章节介绍GaussDB
据库当前支持的MySQL语法。
部分关键字在MySQL可以做标识符但M-Compatibility不可以或存在限制,以下为限制
做标识符列表
8-72 限制做标识符列表
关键字类型
关键字 约束
保留(可以是类型或函
数)
COLLATIONCOMPACT 除函数和变量,不可以作
为其他数据库标识符。
非保留(不能是类型或函
数)
BITBOOLEAN
COALESCEDATE
NATIONALNCHAR
NONENUMBER
TEXTTIME
TIMESTAMP
TIMESTAMPDIFF
不可以作为函数或变量的
标识符。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 477
关键字类型 关键字 约束
保留 ANYARRAY
BUCKETSDOEND
LESSMODIFY
OFFSETONLY
RETURNINGSOME
USER
不可以作为任意数据库标
识符。
8.2.3.8.1 关键字
约束差异:
当关键字在M-Compatibility模式下为保留关键字,在MySQL中为非保留关键字,
其差异为:在M-Compatibility模式下不可作为表名、列名、列别名、AS列别名、
AS表别名、表别名、函数名和变量名,在MySQL中支持。
当关键字在M-Compatibility模式下为非保留关键字,在MySQL中为保留关键字,
其差异为:在M-Compatibility模式下可作为表名、列名、列别名、AS列别名、AS
表别名、表别名、函数名和变量名,在MySQL中不支持。
当关键字在M-Compatibility模式下为保留关键字(可以是函数或类型),在
MySQL中为保留关键字,其差异为:在M-Compatibility模式下可作为列别名、
AS列别名、函数名和变量名,在MySQL中不支持。
当关键字在M-Compatibility模式下为保留关键字(可以是函数或类型),在
MySQL中为非保留关键字,其差异为:在M-Compatibility模式下不可作为表名、
列名、AS表别名和表别名,在MySQL中支持。
当关键字在M-Compatibility模式下为非保留关键字(不能是函数或类型),在
MySQL中为保留关键字,其差异为:在M-Compatibility模式下可作为表名、列
名、列别名、AS列别名、AS表别名、表别名和变量名,在MySQL中不支持。
当关键字在M-Compatibility模式下为非保留关键字(不能是函数或类型),在
MySQL中为非保留关键字,其差异为:在M-Compatibility模式下不可作为函数
名,在MySQL中支持。
M-Compatibility模式下的非保留关键字、保留关键字(可以是函数或类型)以及非保留
关键字(不能是函数或类型)之中,以下关键字不能作为列别名进行使用:
BETWEENBIGINTBLOBCHARCHARACTERCROSSDECDECIMALDIV
DOUBLEEXISTSFLOATFLOAT4FLOAT8GROUPINGINNERINOUTINT
INT1INT2INT3INT4INT8INTEGERJOINLEFTLIKELONGBLOB
LONGTEXTMEDIUMBLOBMEDIUMINTMEDIUMTEXTMODNATURAL
NUMERICOUTOUTERPRECISIONREALRIGHTROWROW_NUMBER
SIGNEDSMALLINTSOUNDSTINYBLOBTINYINTTINYTEXTVALUES
VARCHARVARYINGWITHOUT
其中,SIGNEDWITHOUTMySQL中可以作为列别名进行使用。
8.2.3.8.2 标识符
M-Compatibility模式下标识符存在以下差异:
GaussDB无引号标识符中不支持以美元符号($)开头,MySQL无引号标识符中
支持。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 478
GaussDB无引号标识符中的支持大小写敏感的数据库对象。
GaussDB标识符支持U+0080~U+00FF扩展字符,MySQL标识符支持U+0080~U
+FFFF的扩展字符。
无引号标识符中,GaussDB不支持创建以数字开头包含一个eE结尾作为标识符
的表,例如:
-- GaussDB报错不支持,MySQL支持
m_db=# CREATE TABLE 23e(c1 int);
ERROR: syntax error at or near "23"
LINE 1: CREATE TABLE 23e(c1 int);
^
m_db=# CREATE TABLE t1(23E int);
ERROR: syntax error at or near "23"
LINE 1: CREATE TABLE t1(23E int);
^
有引号标识符中,GaussDB对于创建了列名为纯数字或科学计算法的表,不支持
直接使用,需要在引号中使用;对于点操作符(.)场景,列名为纯数字或科学计
算法的表也需要在引号中使用。例如:
-- 创建列名为纯数字或科学计算法的表
m_db=# CREATE TABLE t1(`123` int, `1e3` int, `1e` int);
CREATE TABLE
-- 向表中插入数据
m_db=# INSERT INTO t1 VALUES(7, 8, 9);
INSERT 0 1
-- 结果非预期,但与MySQL结果一致
m_db=# SELECT 123 FROM t1;
?column?
----------
123
(1 row)
-- 结果非预期,但与MySQL结果一致
m_db=# SELECT 1e3 FROM t1;
?column?
----------
1000
(1 row)
-- 结果非预期,并且与MySQL结果不一致
m_db=# SELECT 1e FROM t1;
e
---
1
(1 row)
-- 正确用法
m_db=# SELECT `123` FROM t1;
123
-----
7
(1 row)
m_db=# SELECT `1e3` FROM t1;
1e3
-----
8
(1 row)
m_db=# SELECT `1e` FROM t1;
1e
----
9
(1 row)
-- 点操作符的场景,GaussDB不支持,MySQL支持
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 479
m_db=# SELECT t1.123 FROM t1;
ERROR: syntax error at or near ".123"
LINE 1: SELECT t1.123 FROM t1;
^
m_db=# SELECT t1.1e3 FROM t1;
ERROR: syntax error at or near "1e3"
LINE 1: SELECT t1.1e3 FROM t1;
^
m_db=# SELECT t1.1e FROM t1;
ERROR: syntax error at or near "1"
LINE 1: SELECT t1.1e FROM t1;
^
-- 点操作符的场景,正确用法:
m_db=# SELECT t1.`123` FROM t1;
123
-----
7
(1 row)
m_db=# SELECT t1.`1e3` FROM t1;
1e3
-----
8
(1 row)
m_db=# SELECT t1.`1e` FROM t1;
1e
----
9
(1 row)
m_db=# DROP TABLE t1;
DROP TABLE
GaussDB分区名使用双引号(需要设置SQL_MODEANSI_QUOTES)或反引号
是区分大小写的,MySQL不区分。
8.2.3.8.3 DDL
概述
详细语法说明 差异
建表和修改表时支持创
建主键、UNIQUE
引、外键约束
ALTER TABLECREATE
TABLE
GaussDB中,当约束关联
的表为ustore,且SQL语句
中指定为using btree时,底
层会建立为ubtree
GaussDB中,允许将外键
作为分区键。
索引名、约束名、key
GaussDBSCHEMA下唯
一,MySQL是表下唯一。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 480
概述 详细语法说明 差异
支持自增列 ALTER TABLECREATE
TABLE
GaussDB的自动增长列建议
为索引的第一个字段,否则
建表时产生警告,MySQL
自动增长列必须为索引第一
个字段,否则建表时会报
错。GaussDB含有自动增长
列的表进行某些操作时会产
生错误,例如:ALTER
TABLE EXCHANGE
PARTITION
GaussDB
AUTO_INCREMENT =
value语法,value必须为小
2^127的正数。MySQL
以为0GaussDB不可以。
GaussDB中当自增值已经达
到字段数据类型的最大值
时,继续自增将产生错误。
MySQL有些场景产生错误
或警告,有些场景仍自增为
最大值。
不支持
innodb_autoinc_lock_mod
e系统变量,GaussDB
GUC参数
auto_increment_cache=0
时,批量插入自动增长列的
行为与MySQL系统变量
innodb_autoinc_lock_mod
e=1相似。
GaussDB的自动增长列在导
入数据或者进行Batch
Insert执行计划的插入操作
时,对于混合0NULL和确
定值的场景,如果产生错
误,后续插入自增值不一定
MySQL完全一致。
提供
auto_increment_cache
参数,可以控制预留自
增值的数量。
GaussDB的并行导入或插入
自动增长列触发自增时,每
个并行线程预留的缓存值也
只在其线程中使用,未完全
使用完毕的话,也会出现表
中自动增长列的值不连续的
情况。并行插入产生的自增
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 481
概述 详细语法说明 差异
值结果无法保证与MySQL
完全一致。
GaussDB的本地临时表中的
自动增长列批量插入时不会
预留自增值,正常场景不会
产生不连续的自增值。
MySQL临时表与普通表中
的自动增长列自增结果一
致。
GaussDBSERIAL数据类型
为原有的自增列,与
AUTO_INCREMENT自增列
有差异。MySQLSERIAL
数据类型就是
AUTO_INCREMENT自增
列。
GaussDB的不允许
auto_increment_oset的值
大于
auto_increment_increment
的值,会产生错误。
MySQL允许,并说明
auto_increment_oset会被
忽略。
在表有主键或索引的情况
下,ALTER TABLE命令重写
表数据的顺序与MySQL
一定相同,GaussDB按表数
据存储顺序重写,MySQL
会按主键或索引顺序重写,
导致自增值的顺序可能不
同。
GaussDBALTER TABLE
令添加或修改自增列时,第
一次预留自增值的数量是表
统计信息中的行数,统计信
息的行数不一定与MySQL
一致。
GaussDBlast_insert_id
数返回值为128位的整型。
GaussDB在触发器或用户自
定义函数中自增时,刷新
last_insert_id返回值。
MySQL不刷新。
GaussDB的对GUC参数
auto_increment_oset
auto_increment_increment
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 482
概述 详细语法说明 差异
设置超出范围的值会产生错
误。MySQL会自动改为边
界值。
支持前缀索引
CREATE INDEXALTER
TABLECREATE TABLE
GaussDB中前缀长度不得超
2676,键值的实际长度
受内部页面限制,若字段中
含有多字节字符或者一个索
引上有多个键,索引行长度
可能会超限报错。
GaussDB中主键索引中不支
持前缀键,创建或添加主键
时不支持指定前缀长度。
支持指定字符集与排序
规则
ALTER SCHEMAALTER
TABLECREATE
SCHEMACREATE
TABLE
指定库级字符集时,除
BINARY字符集外,暂不支
持创建新库/模式的字符集
与数据库的
server_encoding不同。
指定表级、列级字符集和字
符序时,MySQL支持指定
与库级字符集、字符序不同
的字符集和字符序。在
GaussDB中,表级、列级字
符集和字符序仅支持
BINARY字符集、字符序或
者与库级字符集、字符序相
同的字符集、字符序。
修改表时支持在表第一
列前面或者在指定列后
面添加列
ALTER TABLE
-
修改列名称/定义语法
兼容
ALTER TABLE 暂不支持DROP INDEX | DROP
KEY | ORDER BY子项。
创建分区表语法兼容 CREATE TABLE
PARTITIONCREATE
TABLE SUBPARTITION
对于partition_key,分区策
略的分区键仅支持1列,且
不支持表达式。
对于subpartition_key,分
区策略的分区键仅支持1
列,且不支持表达式。
分区表不支持用生成列做分
区键。
建表和修改表时支持指
定表级和列级
comment
CREATE TABLEALTER
TABLE
-
创建索引时支持指定索
引级comment
CREATE INDEX -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 483
概述 详细语法说明 差异
交换普通表和分区表分
区的数据
ALTER TABLE
PARTITION
ALTER TABLE EXCHANGE
PARTITION的差异点:
对于自增列,MySQL执行
alter exchange partition
后,自增列会被重置;
GaussDB 则不会被重置,
自增列则按照旧的自增值递
增。
MySQL表或分区使用
tablespace时,则无法进行
分区和普通表数据的交换;
GaussDB表或分区使用不同
tablespace时,仍可进行
分区和普通表数据的交换。
对于列默认值,MySQL
会校验默认值,因此默认值
不同时也可进行分区和普通
表数据的交换;GaussDB
校验默认值,如果默认值不
同,则无法进行分区和普通
表数据的交换。
MySQL在分区表或普通表
上进行DROP列操作后,表
结构仍然一致,则可进行分
区和普通表数据的交换;
GaussDB需要保证普通表和
分区表的被删除列严格对齐
才能进行分区和普通表数据
的交换。
MySQLGaussDB的哈希
算法不同,所以两者在相同
hash分区存储的数据可能
不一致,导致最后交换的数
据也可能不一致。
MySQL的分区表不支持外
键,普通表包含外键或其他
表引用普通表的外键,则无
法进行分区和普通表数据的
交换;GaussDB的分区表支
持外键,在两个表的外键约
束一致时,则可进行分区和
普通表数据的交换,
GaussDB的分区表不带外
键,普通表有其他表引用,
如果分区表和普通表表一
致,则可进行分区和普通表
数据的交换。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 484
概述 详细语法说明 差异
修改分区表的分区键信
ALTER TABLE MySQL支持修改分区表的分区
键信息,GaussDB中不支持。
支持CREATE TABLE ...
LIKE语法兼容
CREATE TABLE ... LIKE
MySQL 8.0.16 之前的版
本中,CHECK约束会被语法
解析但功能会被忽略,表现
为不复制CHECK约束,
GaussDB支持复制CHECK
束。
对于主键约束名称,在建表
时,MySQL所有主键约束
名称固定为PRIMARY
KEYGaussDB不支持复
制。
对于唯一键约束名称,在建
表时,MySQL支持复制,
GaussDB不支持复制。
对于CHECK约束名称,在建
表时,MySQL 8.0.16 之前
的版本无CHECK约束信息,
GaussDB支持复制。
对于索引名称,在建表时,
MySQL支持复制,
GaussDB不支持复制。
在跨sql_mode模式建表
时,MySQL受宽松模式和
严格模式控制,GaussDB
能存在严格模式失效的情
况。
例如:源表存在默认值
0000-00-00”,在
no_zero_date”严格模式
下,GaussDB建表成功,且
包含默认值
0000-00-00”,严格模
式失效;而MySQL建表失
败,受严格模式控制。
支持增加子分区语法兼
ALTER TABLE [ IF EXISTS ]
{ table_name [*] | ONLY
table_name | ONLY
( table_name )} add_clause;
add_clause:
ADD
{{partition_less_than_item |
partition_start_end_item |
partition_list_item} |
PARTITION({partition_less_than
_item |
partition_start_end_item |
partition_list_item})}
保留原分区表语法。
不支持下述语法添加多分区:
ALTER TABLE table_name ADD
PARTITION (partition_denition1,
partition_denition1,);
仅支持原有添加多分区语法:
ALTER TABLE table_name ADD
PARTITION (partition_denition1),
ADD PARTITION
(partition_denition2[y1] ), ;
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 485
概述 详细语法说明 差异
TRUNCATE子分区语法
兼容
ALTER TABLE [ IF EXISTS ]
table_name
truncate_clause;
支持子项有差异,对于
truncate_clause
M-Compatibility模式:
TRUNCATE PARTITION { { ALL |
partition_name [, ...] } | FOR
( partition_value [, ...] ) }
[ UPDATE GLOBAL INDEX ]
MySQL支持:
TRUNCATE PARTITION
{partition_names | ALL}
主键索引名
CREATE TABLE table_name
( col_denitine ,PRIMARY KEY
[index_name] [ USING
method ] ( { column_name |
( expression ) }[ ASC | DESC ] }
[, ... ] ) index_parameters
[USING method| COMMENT
'string'])
GaussDB中的主键指定索引名
后创建的索引名为用户所指定
的索引名,MySQL索引名为
PRIMARY
删除有依赖的对象
DROP drop_type name
CASCADE;
GaussDB中,删除有依赖的
对象需要加CASCADE
MySQL不需要。
NOT NULL约束不允许
插入NULL
CREATE TABLE t1(id int NOT
NULL DEFAULT 8);
INSERT INTO t1
VALUES(NULL);
INSERT INTO t1 VALUES(1),
(NULL),(2);
MySQL宽松模式下,会将
NULL进行类型转换,并成功插
入数据;在MySQL严格模式下
不允许插入NULL值。在
GaussDB不支持此特性,在宽
松模式和严格模式下均不允许
插入NULL值。
CHECK约束生效 CREATE TABLE CREATE TABLECHECK约束
的时候,MySQL8.0会生效,
MySQL5.7只解析语法但不生
效。GaussDB在此功能上同步
MySQL8.0版本,且GaussDB
CHECK约束可以引用其他列,
MySQL不能。
GaussDB 一个表中最多只能加
32767CHECK约束。
索引的algorithm
lock选项不起作用
CREATE INDEX ...
DROP INDEX ...
M-Compatibility模式的
CREATE/DROP INDEX语句中
INDEX选项algorithm_option
lock_option目前只在语法上
支持,创建时不报错,但实际
不起作用。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 486
概述 详细语法说明 差异
CREATE TABLE hash
分区和二级分区的存储
MySQL不同
CREATE TABLE
GaussDBCREATE TABLE
句中hash分区表和二级分区表
所使用的hash函数与MySQL
一致,因此hash分区表和二级
分区表的存储与MySQL有区
别。
分区表索引
CREATE INDEX GaussDB的分区表索引分为
LOCALGLOBAL两种。
LOCAL索引与某个具体分区绑
定,而GLOBAL索引则对应整
个分区表。
LOCALGLOBAL索引的创建
方法和默认规则具体说明参见
《开发指南》中”SQL语法 >
SQL语句 > C > CREATE
INDEX”章节,例如:在非分
区键上创建唯一索引,会默认
创建为GLOBAL索引。
MySQLGLOBAL索引的概
念。在GaussDB中,当分区表
索引为GLOBAL索引时,对表
分区进行DROP
TRUNCATEEXCHANGE等操
作不会默认更新GLOBAL
引,进而导致GLOBAL索引失
效,导致后续语句无法选中该
索引。为了避免这种场景,建
议用户在使用分区操作语法时
在最后显指定UPDATE
GLOBAL INDEX子句,或配置
全局GUC参数
enable_gpi_auto_update
true(推荐),使得在进行分
区操作时自定更新GLOBAL
引。
COMMENT
中不支持
转义符(\)
CREATE TABLE ...
COMMENT 'string'
CREATE
INDEX ...COMMENT
'string'
GaussDBCOMMENT中不支
持转义符(\)
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 487
概述 详细语法说明 差异
CREATE/ALTER TABLE
语句中分区表为KEY
区,不支持指定
algorithm。部分分区
定义入参不支持表达
式。
CREATE TABLEALTER
TABLE
GaussDBCREATE/ALTER
TABLE语句中分区表为KEY
区,不支持指定algorithm
不支持表达式入参的语法:
PARTITION BY HASH()
PARTITION BY KEY()
VALUES LESS THAN()
分区表不支持
LINEAR/KEY hash
CREATE TABLE ...
PARTITION ...
GaussDB分区表不支持
LINEAR/KEY hash
check
auto_increment语法不
能作用在同一字段
CREATE TABLE
由于MySQL5.7check字段不
生效,check
auto_increment同时作用于同
一字段只有auto_increment
效,但GaussDB报错。
删除存在依赖关系的表
DROP TABLE GaussDB删除存在依赖的表必
须加上CASCADE才能成功,
MySQL不需要。
SET 不支持设置
FOREIGN_KEY_CHECK
S
SET
GaussDB目前不支持SET
FOREIGN_KEY_CHECKS=0|1
表定义相关选项 CREATE TABLE...
ALTER TABLE ...
GaussDB不支持以下选项:
AVG_ROW_LENGTH
CHECKSUM
COMPRESSION
CONNECTIONDATA
DIRECTORYINDEX
DIRECTORY
DELAY_KEY_WRITE
ENCRYPTION
INSERT_METHOD
KEY_BLOCK_SIZE
MAX_ROWS
MIN_ROWS
PACK_KEYS
PASSWORD
STATS_AUTO_RECALC
STATS_PRESISTENT
STATS_SAMPLE_PAGES
以下选项在GaussDB中不报
错,单实际上也不生效:
ENGINE
ROW_FORMAT
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 488
概述 详细语法说明 差异
CMK密钥轮转,轮换
加密COLUMN
ENCRYPTION KEY
CLIENT MASTER
KEY,对COLUMN
ENCRYPTION KEY明文
进行重加密。
ALTER COLUMN
ENCRYPTION KEY
M-Compatibility模式不支持全
密态。故不支持该语法。
密态等值查询特性使用
多级加密模型,主密钥
加密列密钥,列密钥加
密数据。本语法用于创
建主密钥对象。
CREATE CLIENT
MASTER KEY
M-Compatibility模式不支持全
密态。故不支持该语法。
创建一个列加密密钥,
该密钥可用于加密表中
的指定列。
CREATE COLUMN
ENCRYPTION KEY
M-Compatibility模式不支持全
密态。故不支持该语法。
全密态功能,传输密钥
到服务端缓存,只在开
启内存解密逃生通道的
情况下使用。
\send_token
M-Compatibility模式不支持全
密态。故不支持该语法。
全密态功能,传输密钥
到服务端缓存,只在开
启内存解密逃生通道的
情况下使用。
\st
M-Compatibility模式不支持全
密态。故不支持该语法。
全密态功能,销毁服务
端缓存的密钥,只在开
启内存解密逃生通道的
情况下使用。
\clear_token
M-Compatibility模式不支持全
密态。故不支持该语法。
全密态功能,销毁服务
端缓存的密钥,只在开
启内存解密逃生通道的
情况下使用。
\ct
M-Compatibility模式不支持全
密态。故不支持该语法。
在全密态数据库特性
,用于设置访问外部
密钥管理者的参数。
\key_info KEY_INFO
M-Compatibility模式不支持全
密态。故不支持该语法。
全密态功能,用于开启
三方动态库功能与加载
三方动态库时的参数设
置。
\crypto_module_info
MODULE_INFO
M-Compatibility模式不支持全
密态。故不支持该语法。
全密态功能,用于开启
三方动态库功能与加载
三方动态库时的参数设
置。
\cmi MODULE_INFO
M-Compatibility模式不支持全
密态。故不支持该语法。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 489
概述 详细语法说明 差异
generated always as
语句不能再引用由
generated always as
生成的列。
Generated Always AS
GaussDB generated always
as语句不能再引用由generated
always as生成的列,MySQL
可以。
ALTER TABLE目前不支
RENAME =语法
ALTER TABLE GaussDBALTER TABLE目前
只支持RENAME TO
RENAME AS语法,MySQL
RENBAME TORENAME
ASRENAME =
禁用GUC参数
enable_expr_fusion
SET
enable_expr_fusion=
ON
M-Compatibility模式暂不支持
GUC参数enable_expr_fusion
打开。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 490
概述 详细语法说明 差异
支持CREATE VIEW AS
SELECT语法兼容
CREATE VIEW table_name AS
query
针对以下类型,不支持
CREATE VIEW view_name
AS query语法中query包含
计算操作(如函数调用、使
用操作符计算)。
BINARY[(n)]
BOOLEAN/BOOL
VARBINARY(n)
CHAR[(n)]
VARCHAR(n)
TIME[(p)]
DATETIME[(p)]
TIMESTAMP[(p)]
BIT[(n)]
NUMERIC[(p[,s])]
DECIMAL[(p[,s])]
DEC[(p[,s])]
FIXED[(p[,s])]
FLOAT4[(p, s)]
FLOAT8[(p,s)]
FLOAT[(p)]
REAL[(p, s)]
FLOAT[(p, s)]
DOUBLE[(p,s)]
DOUBLE
PRECISION[(p,s)]
TEXT
TINYTEXT
MEDIUMTEXT
LONGTEXT
BLOB
TINYBLOB
MEDIUMBLOB
LONGBLOB
query为简单查询场景
下,M-Compatibility模式
针对上述类型的计算操作进
行报错提示,例如:
m_db=# CREATE TABLE TEST
(salary int(10));
CREATE TABLE
m_db=# INSERT INTO TEST
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 491
概述 详细语法说明 差异
VALUES(8000);
INSERT 0 1
m_db=# CREATE VIEW view1 AS
SELECT salary/10 as te FROM
TEST;
ERROR: Unsupported type
numeric used with expression in
CREATE VIEW statement.
m_db=# CREATE TABLE TEST
(salary int(10));
CREATE TABLE
m_db=# INSERT INTO TEST
VALUES(8000);
INSERT 0 1
m_db=# CREATE VIEW view2 AS
SELECT sec_to_time(salary) as te
FROM TEST;
ERROR: Unsupported type time
used with expression in CREATE
VIEW statement.
query为复合查询,子查
询等非简单查询场景下,
M-Compatibility模式针对
上述类型的计算操作与
MySQL存在差异,M-
Compatibility模式下新创建
表的数据类型列精度属性不
保留。
索引名可重名范围
CREATE TABLE
CREATE INDEX
MySQL中索引名在一个表下唯
一,在不同的表下可以有相同
的索引名。M-Compatibility
式中的索引名在同一个
SCHEMA下唯一,在同一的
SCHEMA下不可用相同的索引
名。在M-Compatibility模式
下,针对会自动创建索引的约
束和key,也会有相同的规则。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 492
概述 详细语法说明 差异
视图依赖差异 CREATE VIEWALTER
TABLE
MySQL中视图存储,只记录目
标表的表名、列名、数据库名
信息,不记录目标表的唯一标
识;GaussDB会将创建视图时
SQL解析,并存储目标表的
唯一标识。因此存在如下差
异:
1. 修改存在视图依赖的列的数
据类型,MySQL中对应的
视图不感知目标表的修改,
因此可以修改成功;
GaussDB视图中的列禁止修
改数据类型,因此无法修改
该列的数据类型。
2. 重命名存在视图依赖的列,
MySQL中对应的视图不感
知目标表的修改,因此可以
修改成功,但是后续无法查
询该视图;GaussDB视图
中,每个列精确存储了其对
应的表和列的唯一标识,因
此表中的列名可以修改成
功,视图中的列名不被修
改,且后续可以查询该视
图。
外键差异
CREATE TABLE GaussDB外键约束对类型不敏
感,如果主表和从表对应的字
段数据类型存在隐式类型转换
就可以建成。MySQL外键类型
敏感。如果两个表对应的列类
型不同外键无法建成。
MySQL不支持通过MODIFY
COLUMNCHANGE
COLUMN方式修改表列外键所
在列的数据类型或列名等,
GaussDB可以。
索引升降序差异 CREATE INDEX MySQL 5.7中,ASC | DESC
被解析但是被忽略,默认行为
ASC;在MySQL 8.0
GaussDB中,ASC | DESC被解
析且生效。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 493
8.2.3.8.4 DML
序号 概述 详细语法说
差异
1 DELETE支持从多个表中
删除数据
DELETE -
2 DELETE支持ORDER BY
LIMIT
DELETE -
3 DELETE支持从指定分区
(或子分区)删除数据
DELETE -
4 UPDATE支持从多个表中
更新数据
UPDATE -
5 UPDATE支持ORDER BY
LIMIT
UPDATE -
6 SELECT INTO语法兼容 SELECT
GaussDB可以使用SELECT
INTO根据查询结果创建一个新
表,MySQL不支持。
GaussDBSELECT INTO语法
不支持将多个查询进行集合运
算后的结果作为查询结果。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 494
序号 概述 详细语法说
差异
7 REPLACE INTO语法兼容 REPLACE
时间类型初始值的差异。例如:
MySQL不受严格模式和宽松
模式的影响,可向表中插入
时间0值,即:
mysql> CREATE TABLE test(f1
TIMESTAMP NOT NULL, f2
DATETIME NOT NULL, f3 DATE
NOT NULL);
Query OK, 1 row aected (0.00 sec)
mysql> REPLACE INTO test
VALUES(f1, f2, f3);
Query OK, 1 row aected (0.00 sec)
mysql> SELECT * FROM test;
+---------------------
+---------------------+------------+
| f1 | f2 |
f3 |
+---------------------
+---------------------+------------+
| 0000-00-00 00:00:00 | 0000-00-00
00:00:00 | 0000-00-00 |
+---------------------
+---------------------+------------+
1 row in set (0.00 sec)
GaussDB在宽松模式下才可
以成功插入时间0值,即
gaussdb=# SET b_format_version =
'5.7';
SET
gaussdb=# SET
b_format_dev_version = 's1';
SET
gaussdb=# SET sql_mode = '';
SET
gaussdb=# CREATE TABLE test(f1
TIMESTAMP NOT NULL, f2
DATETIME NOT NULL, f3 DATE
NOT NULL);
CREATE TABLE
gaussdb=# REPLACE INTO test
VALUES(f1, f2, f3);
REPLACE 0 1
gaussdb=# SELECT * FROM test;
f1 | f2 | f3
---------------------
+---------------------+------------
0000-00-00 00:00:00 | 0000-00-00
00:00:00 | 0000-00-00
(1 row)
在严格模式下,则报错date/
time eld value out of
range: "0000-00-00
00:00:00"
位串类型初始值的差异。例
如:
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 495
序号 概述 详细语法说
差异
MySQLBIT类型的初始值为
空串'',长度为(M/8向上取
整),即:
mysql> CREATE TABLE test(f1
BIT(3) NOT NULL);
Query OK, 0 rows aected (0.01
sec)
mysql> REPLACE INTO test
VALUES(f1);
Query OK, 1 row aected (0.00 sec)
mysql> SELECT f1, length(f1)
FROM test;
+----+------------+
| f1 | length(f1) |
+----+------------+
| | 1 |
+----+------------+
1 row in set (0.00 sec)
GaussDBBIT类型的初始值
为空串'',长度为0,则报
错。
gaussdb=# CREATE TABLE test(f1
BIT(3) NOT NULL);
CREATE TABLE
gaussdb=# REPLACE INTO test
VALUES(f1);
REPLACE 0 1
gaussdb=#
SELECT f1, length(f1) FROM test;
+----+------------+
| f1 | length(f1) |
+----+------------+
| | 0 |
+----+------------+
(1 row)
8
SELECT支持指定多分区
查询
SELECT -
9 UPDATE支持指定多分区
更新
UPDATE -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 496
序号 概述 详细语法说
差异
10 LOAD DATA导入数据功
LOAD
DATA
在使用LOAD DATA导入数据功能
时,GaussDBMySQL相比有如
下差异:
LOAD DATA语法执行结果与M*
严格模式一致,宽松模式暂未
适配。
IGNORELOCAL参数功能仅为
当导入数据与表中数据存在冲
突时,忽略当前冲突行数据功
能和当文件中字段数小于指定
表中列数时自动为其余列填充
默认值功能,其余功能暂未适
配。
指定LOCAL关键字,且文件路
径为相对路径时,文件从二进
制目录下搜索;不指定LOCAL
关键字,且文件路径为相对路
径时,文件从数据目录下搜
索。
语法中指定分隔符,转义字
符,分行符等符号时,若指定
为单引号,将导致词法解析错
误。
[(col_name_or_user_var [,
col_name_or_user_var] ...)]
定列参数不支持重复指定列。
[FIELDS TERMINATED BY
'string']指定换行符不能与
[LINES TERMINATED BY
'string']分隔符相同。
执行LOAD DATA语法写入表中
的数据若无法转换为表中数据
类型格式时报错。
LOAD DATA SET表达式中不支
持指定列名计算。
set表达式返回值类型与对应
列类型之间不存在隐式转换函
数则报错。
LOAD DATA只能用于表,不能
用于视图。
Windows下的文件与Linux环境
下文件默认换行符存在差异,
LOAD DATA无法识别此场景会
报错,建议用户导入时检查导
入文件行结尾的换行符。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 497
序号 概述 详细语法说
差异
11 INSERT支持VALUES引用
列语法
INSERT
INTO
tabname
VALUES(1,
2,3) ON
DUPLICAT
E KEY
UPDATE b
=
VALUES(co
lumn_nam
e)
GaussDB ON DUPLICATE KEY
UPDATE子句中的VALUES()不支持
表名.列名格式,MySQL支持。
12
LIMIT限制差异 DELETE
SELECT
UPDATE
各个语句的limit子项与MySQL
limit项当前存在差异。
GaussDBlimit参数最大值为BIG
INT类型限制(超过
9223372036854775807报错)。
MySQL中,limit最大值为
unsigned LONGLONG类型限制
(超过18446744073709551615
报错)。
limit可以设置小数值,实际执行时
四舍五入。MySQL不能取小数。
GaussDBdelete语句中,不允许
limit 0MySQLdelete语句中允
limit 0
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 498
序号 概述 详细语法说
差异
13 反斜杠(\)用法差异 INSERT 反斜杠(\)的用法在GaussDB
MySQL中都可以由参数控制但当
前默认用法不同:
MySQL中使用参数
NO_BACKSLASH_ESCAPES控制字
符串和标识符中的反斜杠(\)被解析
为普通字符还是转义字符,默认反
斜杠字符(\)作为字符串和标识符中
的转义字符。设置set
sql_mode='NO_BACKSLASH_ESC
APES';可以禁用反斜杠字符(\)作为
字符串和标识符中的转义字符。
GaussDB中使用参数
standard_conforming_strings控制
字符串和标识符中的反斜杠 \ 被解
析为普通字符还是转义字符。默认
值为on,在普通字符串文本中按照
SQL标准把反斜扛(\)当普通文本。
使用set
standard_conforming_strings=o;
将反斜杠字符(\)作为字符串和标识
符中的转义字符。
14
插入值少于字段数目时,
MySQL报错,GaussDB
补充空值。
INSERT
GaussDB不指定列的列表时,如果
插入值少于字段数目,默认按建表
时的字段顺序赋值。字段上有非空
约束时报错,没有非空约束时,如
果指定了默认值则缺省部分补充默
认值,若未指定默认值则补充空。
15
ORDER BY中排序的列必
须包括在结果集的列中。
SELECT GaussDB中,在与GROUP BY
句一起使用的情况下,ORDER BY
中排序的列必须包括在SELECT
句所检索的结果集的列中。在与
DISTINCT关键字一起使用的情况
下,ORDER BY中排序的列必须包
括在SELECT语句所检索的结果集
的列中。
16 不允许对约束字段用 ON
DUPLICATE KEY
UPDATE 进行修改。
INSERT
-
17 SELECT结果允许存在重
复列名。
SELECT -
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 499
序号 概述 详细语法说
差异
18 NATURAL JOIN
MySQL有差异。
SELECT GaussDB中,NATURAL [ [LEFT
| RIGHT] OUTER] JOIN允许不指
LEFT | RIGHT,不指定时
NATURAL OUTER JOIN
NATURAL JOIN。允许连续使用多
JOIN
19
外键数据类型是
timestamp/datetime
时,update/delete外表
报错。
UPDATE/
DELETE
外键数据类型是timestamp/
datetime时,update/delete外表
报错,MySQL成功。
20
nature joinusing
容。
SELECT
GaussDB join的顺序严格按照
从左往右,MySQL可能会调整
顺序。
GaussDBMySQLnatural
joinusing时均不允许左表或
右表参与join的字段出现歧义
(一般由左或右临时表中重名
字段造成)。因为两者join的顺
序有差别,故行为上可能有差
别。
GaussDB的行为:
m_regression=# CREATE TABLE
t1(a int,b int);
CREATE TABLE
m_regression=# CREATE TABLE
t2(a int,b int);
CREATE TABLE
m_regression=# CREATE TABLE
t3(a int,b int);
CREATE TABLE
m_regression=# SELECT * FROM t1
JOIN t2;
a | b | a | b
---+---+---+---
(0 rows)
m_regression=# SELECT * FROM t1
JOIN t2 natural join t3; -- failed,
:a,bt1 join t2 得到的临时表中
存在重复,故nature join存在歧义。
ERROR: common column name
"a" appears more than once in left
table
MySQL的行为:
mysql> SELECT * FROM t1 JOIN t2
NATURAL JOIN t3;
Empty set (0.00 sec)
mysql> SELECT * FROM (t1 join t2)
NATURAL JOIN t3;
ERROR 1052 (23000): Column 'a'
in from clause is ambiguous
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 500
序号 概述 详细语法说
差异
21 with clause兼容
MySQL8.0版本
SELECT
INSERT
UPDATE
DELETE
-
22 join兼容 SELECT GaussDB join不支持使用逗号
,”的连接方式,MySQL支持。
GaussDB不支持use index for
join
23
SELECT语句中列表达式
为函数表达式、算数表达
式等情形时,查询结果显
示的列名为 ?column?
SELECT
GaussDB SELECT语句中列表达式
为函数表达式、算数表达式等情形
时,查询结果显示的列名为 ?
column?MySQL为对应表达式。
24
SELECT导出文件(into
outle
SELECT ...
INTO
OUFILE ...
SELECT INTO OUTFILE语法,导
出文件中FLOATDOUBLE
REAL类型的值显示精度和MySQL
存在差异,不影响COPY导入和导
入后的值。
25
UPDATE/INSERT/
REPLACE ... SET指定模
式名、表名
UPDATE/
INSERT/
REPLACE ...
SET
UPDATE/REPLACE SET中,
MySQL的三段式用法为
database.table.column
GaussDB的三段式用法为
table.column.led,其中led为指
定复合类型中的属性。二者存在差
异。
INSERT ... SET中,MySQL支持使
columntable.column
database.table.column
GaussDB只支持使用column,不
支持使用table.column
database.table.column,二者存
在差异。
26 UPDATE SET执行顺序与
MySQL不同
UPDATE ...
SET
MySQL中,UPDATE SET的顺序是
从前往后依次UPDATE,前面
UPDATE的结果会影响后面的结
果,且允许多次设置同一列;
GaussDB中为先取出原来的所有相
关的数据,再一次性UPDATE,且
不允许多次设置同一列,二者存在
差异。
27 IGNORE特性 INSERT MySQL数据库和GaussDB执行过
程的差异,因此产生的WARNING
条数和WARNING信息可能存在不
同。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 501
序号 概述 详细语法说
差异
28 HAVING语法 SELECT GaussDBHAVING必须仅引用
GROUP BY子句中的列或聚合函数
中使用的列。但是,MySQL支持
对此行为的扩展,并允许HAVING
引用列表中的SELECT列和外部子
查询中的列。
29
SELECT后跟行表达式 SELECT MySQL不支持SELECT后跟行表达
式,GaussDB支持SELECT后跟行
表达式。
MySQL的行为:
mysql> SELECT row(1,2);
ERROR 1241 (21000): Operand should
contain 1 column(s)
GaussDB的行为:
m_db=# SELECT row(1,2);
row(1,2)
----------
(1,2)
(1 row)
8.2.3.8.5 DCL
序号
概述 详细语法说明 差异
1 SET NAMES指定
COLLATE字句
SET [ SESSION |
LOCAL ] NAMES
{'charset_name'
[COLLATE
'collation_name'] |
DEFAULT};
GaussDB中暂不支持指定
charset_name与数据库字
符集不同。具体请参考
M-Compatibility开发指
南》中“SQL参考 > SQL
语法 > SQL语句 > S >
SET ”章节。
8.2.3.8.6 其它语句
概述 详细语法说明 差异
1 事务相关语法 数据库默认隔离
级别
M-Compatibility默认隔离级别为READ
COMMITTEDMySQL默认隔离级别为
REPEATABLE READ
M-Compatibility隔离级别只有READ
COMMITTED REPEATABLE READ生效。
2
事务相关语法 事务嵌套 M-Compatibility中嵌套事务不会自动提
交,MySQL会自动提交。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 502
概述 详细语法说明 差异
3 事务相关语法 自动提交 M-Compatibility使用GaussDB存储,继
GaussDB事务机制,事务中执行DDL
DCL不会自动提交。MySQLDDL
DCL、管理类语句,锁相关语句会自动提
交。
4
事务相关语法 报错后需
rollback
M-Compatibility事务中报错,需要执行
rollbackMySQL无限制。
5 事务相关语法 锁机制 M-Compatibility锁机制只能在事务块中
使用,MySQL无限制。
6 锁机制 锁机制
MySQL获取read锁后,当前会话无法
进行写操作,M-Compatibility获取
read锁后,当前会话可以进行写操
作。
MySQL给表上锁后,读取其他表报
错,M-Compatibility无限制。
MySQL同一会话中获取同一个表的
锁,会自动释放上一个锁,并提交事
务,M-Compatibility无该机制。
M-CompatibilityLOCK TABLE只能
在一个事务块的内部有用,且无
UNLOCK TABLE命令,锁总是在事务
结束时释放。
8.2.3.8.7 用户与权限
概述
M-Compatibility中,用户与权限管控相关的行为、语法整体沿用GaussDB的机制,
暂不同步MySQL
用户与权限的行为与GaussDB保持一致,具体行为说明请参见《开发指南》中的“数
据库安全 > 用户及权限”章节。
用户与权限的语法在原有GaussDB的基础上,裁剪了部分语法,具体语法说明请参见
M-Compatibility开发指南》中的“ SQL参考 > SQL语法 > SQL语句”章节。M-
CompatibilityGaussDB的语法差异请参见8-73
M-Compatibility创建USER时会自动创建与USER同名的SchemaMySQL不创建。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 503
8-73 M-Compatibility GaussDB 的语法差异
语法说明 概述 M-Compatibility
GaussDB的差异
1 CREATE ROLE 创建一个角色。 M-Compatibility中,
不支持指定涉及以下关键
字的选项:ENCRYPTED
UNENCRYPTED
RESOURCE POOLPERM
SPACETEMP SPACE
SPILL SPACE
2 CREATE USER 创建一个用户。
3 CREATE GROUP 创建一个新用户组。
CREATE GROUP
CREATE ROLE的别名,不
推荐使用。
4
ALTER ROLE 修改角色属性。
5 ALTER UER 修改用户属性。
6 ALTER GROUP 修改一个用户组的属性。 -
7 DROP ROLE 删除角色。 -
8 DROP USER 删除用户。 -
9 DROP GROUP 删除用户组。 -
10 DROP OWNED 删除一个数据库角色所拥
有的数据库对象。
-
11 REASSIGN OWNED 修改数据库对象的属主。 M-Compatibility中不支持
该语法。
12 GRANT 对角色和用户进行授权操
作。
M-Compatibility中不支持
授予或回收函数、存储过
程、表空间、DATABASE
LINK等对象的权限。
13
REVOKE 用于撤销一个或多个角色
的权限。
14 ALTER DEFAULT
PRIVILEGES
设置应用于将来创建的对
象的权限(这不会影响分
配到已有对象中的权
限)。
M-Compatibility中不支持
该语法。
差异说明
语法格式差异
M-Compatibility的授权语法请参见《M-Compatibility开发指南》中的“ SQL
> SQL语法 > SQL语句 > G > GRANT”章节,MySQL中的授权语法如下:
-- 全局级、数据库级、表级、存储过程级赋权语法
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user [auth_option] [, user [auth_option]] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH {GRANT OPTION | resource_option} ...]
-- 用户代理赋权语法
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 504
GRANT PROXY ON user
TO user [, user] ...
[WITH GRANT OPTION]
object_type: {
TABLE
| FUNCTION
| PROCEDURE
}
priv_level: {
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
}
user:
'user_name'@'host_name'
auth_option: {
IDENTIFIED BY 'auth_string'
| IDENTIFIED WITH auth_plugin
| IDENTIFIED WITH auth_plugin BY 'auth_string'
| IDENTIFIED WITH auth_plugin AS 'auth_string'
| IDENTIFIED BY PASSWORD 'auth_string'
}
tls_option: {
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
}
resource_option: {
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
}
赋权类型差异
MySQL支持的赋权类型如下:
8-74 MySQL 支持的赋权类型
权限类型
释义及权限级别
ALL [PRIVILEGES] 授予指定访问级别的所有权限,除了
GRANT OPTION PROXY
ALTER 启用ALTER TABLE。级别:全局、数
据库、表。
ALTER ROUTINE 允许更改或删除存储过程。级别:全
局、数据库、例程。
CREATE 启用数据库和表创建。级别:全局、
数据库、表。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 505
权限类型 释义及权限级别
CREATE ROUTINE 启用存储过程创建。级别:全局、数
据库。
CREATE TABLESPACE 允许创建、更改或删除表空间和日志
文件组。级别:全局。
CREATE TEMPORARY TABLES 启用CREATE TEMPORARY TABLE
级别:全局、数据库。
CREATE USER 启用CREATE USER DROP USER
RENAME USERREVOKE ALL
PRIVILEGES。级别:全局。
CREATE VIEW
允许创建或更改视图。级别:全局、
数据库、表。
DELETE 启用DELETE. 级别:全局、数据库、
表。
DROP 允许删除数据库、表和视图。级别:
全局、数据库、表。
EVENT 启用定时任务。级别:全局、数据
库。
EXECUTE 使用户能够执行存储过程。级别:全
局、数据库、存储过程。
FILE 使用户能够使服务器读取或写入文
件。级别:全局。
GRANT OPTION 允许向其他账户授予权限或从其他账
户删除权限。级别:全局、数据库、
表、存储过程、代理。
INDEX
允许创建或删除索引。级别:全局、
数据库、表。
INSERT 启用INSERT。级别:全局、数据库、
表、列。
LOCK TABLES 在具有SELECT权限的表上启用LOCK
TABLES 。级别:全局、数据库。
PROCESS 使用户能够通过SHOW PROCESSLIST
查看所有正在运行的线程. 级别:全
局。
PROXY
启用用户代理。级别:从用户到用
户。
REFERENCES 启用外键创建。级别:全局、数据
库、表、列。
RELOAD 启用FLUSH操作的使用。级别:全
局。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 506
权限类型 释义及权限级别
REPLICATION CLIENT 使用户能够查询源服务器或副本服务
器的位置。级别:全局。
REPLICATION SLAVE 允许副本从源读取二进制日志。级
别:全局。
SELECT 启用使用SELECT。级别:全局、数据
库、表、列。
SHOW DATABASES 启用SHOW DATABASES以显示所有
数据库。级别:全局。
SHOW VIEW 启用SHOW CREATE VIEW。级别:
全局、数据库、表。
SHUTDOWN 启用mysqladmin shutdown的使
用。级别:全局。
SUPER 启用其他管理操作,例如 CHANGE
MASTER TO KILL PURGE
BINARY LOGS SET GLOBAL
mysqladmin debug命令。级别:全
局。
TRIGGER
启用触发器操作。级别:全局、数据
库、表。
UPDATE 启用UPDATE 级别:全局、数据
库、表、列。
USAGE 等价于“没有特权”。
M-Compatibility以级别划分支持以下权限:
8-75 M-Compatibility 支持的赋权类型
授权对象
支持授予的权限
模式 CREATEUSAGEALTERDROP
COMMENT
表、视图 SELECTINSERTUPDATE
DELETETRUNCATE
REFERENCESTRIGGERALTER
DROPCOMMENTINDEX
VACUUM
SELECTINSERTUPDATE
REFERENCESCOMMENT
序列 SELECTUSAGEUPDATE
ALTERDROPCOMMENT
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 507
MySQL中通过'dbname.*'表示模式层级的授权对象;在M-Compatibility中,使用
'{DATABASE | SCHEMA} dbname'表示模式层级的授权对象。
MySQL中用户名为两部分:用户名@主机名;M-Compatibility当前仅支持用户
名。
MySQL支持在GRANT赋权语法中修改用户验证,安全连接,资源参数属性,即
auth_optiontls_optionresource optionM-Compatibility赋权语法中不支持
以上特性,需使用CREATE USERALTER USER设置用户相关属性。
MySQL支持用户代理赋权,GRANT PROXY ON主要用于对多个用户进行统一的
权限管理。MySQL5.7未提供角色机制,而在MySQL8.0M-Compatibility中都提
供了角色机制。角色能满足用户对于多个用户权限统一管控的目标,可以替代
GRANT PROXY ON
M-Compatibility拥有public的概念,所用用户都拥有public的权限,部分系统
表、系统视图可供所有用户查询。用户可以对public所拥有的权限进行grant
revokeMySQL中,新创建的用户只拥有全局的usage权限,这个权限很小,几
乎为0,只有连接数据库和查询information_schema 数据库的权限。
M-Compatibility中,对象的所有者缺省具有该对象上的所有权限,出于安全考虑
所有者可以舍弃部分权限,但ALTERDROPCOMMENTINDEXVACUUM
及对象的可再授予权限属于所有者固有的权限,隐式拥有;MySQL中,没有
owner的概念,即使用户创建了表,如果没赋予用户对应权限,那么用户也不能
对其创建的表进行IUD等操作。
MySQL中,USAGE实际上表示无权限,所用用户都拥有该权限,当执行revoke
grant usage时,实际上不会进行任何修改;在M-Compatibility中,USAGE
限如下:
对于模式,USAGE允许访问包含在指定模式中的对象,若没有该权限,则只
能看到这些对象的名称。
对于序列,USAGE允许使用nextval函数。
M-Compatibility中,支持给用户设置管理员角色,包括系统管理员
SYSADMIN)、安全管理员(CREATEROLE)、审计管理员
AUDITADMIN)、监控管理员(MONADMIN)、运维管理员
OPRADMIN)、安全策略管理员(POLADMIN)。默认情况下拥有SYSADMIN
属性的系统管理员,具备系统最高权限。三权分立后,系统管理员将不再具有
CREATEROLE属性(安全管理员)和AUDITADMIN属性(审计管理员)能力,即
不再拥有创建角色和用户的权限,也不再拥有查看和维护数据库审计日志的权
限;在MySQL中,不支持该用户设置管理员角色,也没有三权分立相关设计。
M-Compatibility中,可以给用户赋予ANY权限,表示用户能够在非系统模式下
拥有对应的权限,包括CREATE ANY TABLESELECT ANY TABLECREATE ANY
INDEX等;在MySQL中,不支持ANY权限的赋予。
MySQL中提供SHOW GRANTS查询用户权限;M-Compatibility中,可以通过gsql
客户端元命令'\l+''\dn+' '\dp'查询权限信息,也可以通过查询
pg_namespacepg_classpg_attribute等系统表的权限相关字段查询权限信
息。
MySQL中数据库、表、列被删除时,相关的授权信息在系统表中依然保留,如果
重新创建同名对象用户依然拥有权限;M-Compatibility中当数据库、表、列被删
除时,相关的授权信息会被删除,在重新创建同名对象后需要重新授权。
MySQL在授予数据库层级的权限时,支持‘_’和‘%’对数据库名进行模糊匹
配;M-Compatibility不支持对象名模糊匹配,‘_’或‘%’等特殊字符被识别为
普通字符。
MySQL中,GRANT语句中指定用户不存在时默认会创建该账户(此特性已在
MySQL8.0中移除);M-Compatibility不支持给未创建用户赋权。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 508
8.2.3.8.8 系统表和系统视图
系统表或系统视图 差异列 M-Compatibility
MySQL的差异
1 information_schema.
columns
generation_expression 该字段输出结果因涉及M-
CompatibilityMySQL
表达式的字符串拼接逻辑
的不同而存在差异。
2
information_schema.
columns
data_type 该字段输出结果因涉及M-
Compatibility的数据类型
format_type输出,目前未
修改,与MySQL存在差
异。
3
information_schema.
columns
column_type 该字段输出结果因涉及M-
Compatibility的数据类型
format_type输出,目前未
修改,与MySQL存在差
异。
4
information_schema.
tables
engine M-Compatibility中不支持
该字段。
5 information_schema.
tables
version M-Compatibility中不支持
该字段。
6 information_schema.
tables
row_format M-Compatibility中不支持
该字段。
7 information_schema.
tables
avg_row_length M-Compatibility下表示使
用数据文件除以所有元组
数(包括活元组和死元
组)的结果。表中没有元
组,值为null
8
information_schema.
tables
max_data_length M-Compatibility中不支持
该字段。
9 information_schema.
tables
data_free M-Compatibility中表示死
元组在总元组中的比例乘
以数据文件大小。如果表
中没有元组,则为null
10
information_schema.
tables
check_time M-Compatibility中不支持
该字段。
11 information_schema.
tables
create_time M-Compatibility下,此
字段与MySQL行为表现有
差异,对于创建视图的情
MySQL中该字段置
nullM-Compatibility
显示实际的创建表时间。
数据库自带的表,视图设
null
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 509
系统表或系统视图 差异列 M-Compatibility
MySQL的差异
12 information_schema.
tables
update_time M-Compatibility数据库自
带的表,视图设置null
13 information_schema.
tables
table_collation M-Compatibility下,此
字段与MySQL行为表现有
差异。如果表指定的是视
图,则为null。如果指定的
表在创建时,未使用
COLLATE子句指定列的排
序规则,则为null
14 information_schema.
statistics
collation M-Compatibility只有值
AD,不会是NULL
15 information_schema.
statistics
packed M-Compatibility中不支持
该字段。
16 information_schema.
statistics
sub_part M-Compatibility中不支持
该字段。
17 information_schema.
statistics
comment M-Compatibility中不支持
该字段。
18 information_schema.
partitions
subpartition_name M-Compatibility中,如果
分区不是子分区,则为
null
19
information_schema.
partitions
subpartition_ordinal_p
osition
M-Compatibility中,如果
分区不是子分区,则为
null
20
information_schema.
partitions
partition_method M-Compatibility中,
分区策略。如果分区不是
一级分区,则为null
'r':范围分区。
'l'list分区。
'h'hash分区。
'i':间隔分区。
21 information_schema.
partitions
subpartition_method M-Compatibility中,
子分区策略。如果分区不
是二级分区,则为null
'r':范围分区。
'l'list分区。
'h'hash分区。
'i':间隔分区。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 510
系统表或系统视图 差异列 M-Compatibility
MySQL的差异
22 information_schema.
partitions
partition_description M-Compatibility中,是区
分一级分区和二级分区
的。
23
information_schema.
partitions
partition_expression M-Compatibility中不支持
该字段。
24 information_schema.
partitions
subpartition_expressio
n
M-Compatibility中不支持
该字段。
25 information_schema.
partitions
data_length M-Compatibility中不支持
该字段。
26 information_schema.
partitions
max_data_length M-Compatibility中不支持
该字段。
27 information_schema.
partitions
index_length M-Compatibility中不支持
该字段。
28 information_schema.
partitions
data_free M-Compatibility中不支持
该字段。
29 information_schema.
partitions
create_time M-Compatibility中不支持
该字段。
30 information_schema.
partitions
update_time M-Compatibility中不支持
该字段。
31 information_schema.
partitions
check_time M-Compatibility中不支持
该字段。
32 information_schema.
partitions
checksum M-Compatibility中不支持
该字段。
33 information_schema.
partitions
partition_comment M-Compatibility中不支持
该字段。
34 information_schema.
partitions
nodegroup M-Compatibility中不支持
该字段。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 511
视图中对于整型的类型回显,不支持指定精度范围。如MySQLbigint(1)M-
Compatibility下对应的是bigint类型,MySQLbigint(21) unsigned,在M-Compatibility
对应的是bigint unsigned类型。
MySQLint类型,在M-Compatibility中是integer类型。
MySQL中的setenum类型的字段,M-Compatibility中都不支持。
m_schema.columns_priv视图的Column_priv字段、m_schema.tables_priv视图的
Table_priv,Column_priv字段、m_schema.procs_priv视图的Routine_type,Proc_priv字段、
m_schema.proc视图的
type,language,sql_data_access,is_deterministic,security_type,sql_mode字段、
m_schema.func视图的type字段均不支持,在此版本中不予显示。
由于information_schema.tablesinformation_schema.statisticstable_rows
avg_row_lengthdata_lengthdata_freeindex_lengthcardinality基于统计信息获取,
查看前请先执行ANALYZE,更新统计信息后再查看(如果数据库中更新数据,建议延迟执行
ANALYZE)。
information_schema.statistics包含的索引列需要是创建索引中索引列是完整的表列,如果索
引列是表达式,不在这个视图中。
information_schema.partitions table_row, avg_row_length基于统计信息获取,查看前请
先执行ANALYZE,更新统计信息后再查看(如果数据库中更新数据,建议延迟执行
ANALYZE)。
information_schema.partitions中一级分区和二级分区是分开呈现。
对于支持的grantee字段,MySQL的格式是'
user_name
'@'
host_name
' ,在M-Compatibility
数据库,是被授予权限的用户或角色的名称。
对于支持的host字段,在M-Compatibility数据库,返回当前节点的hostname
m_schema.tables_privinformation_schema.user_privileges
information_schema.schema_privilegesinformation_schema.table_privileges
information_schema.column_privilegesm_schema.columns_privm_schema.func
m_schema.procs_priv MySQL下需要授权后才能查看视图内容,M-Compatibility数据库
可以根据默认权限查看到对应的内容。如对于表t1,在MySQL下需要先对t1给对应的用户授
权,才能在权限视图中看到对应的权限信息,M-Compatibility数据库下则可以直接在视图中
看到t1表相关的权限信息。
云数据库 GaussDB
产品介绍 8 MySQL 兼容性说明
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 512
9 安全
9.1 责任共担
华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针
对层出不穷的云安全挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业
界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不
同区域和行业的完善云服务安全保障体系。
安全性是华为云与您的共同责任,如9-1所示。
华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其
所提供的 IaaSPaaS SaaS 类云服务自身的安全,涵盖华为云数据中心的物理
环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基
础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更
广义的安全合规遵从。
租户:负责云服务内部的安全,安全地使用云。 华为云租户的安全责任在于对使
用的 IaaSPaaS SaaS 类云服务内部的安全以及对租户定制配置进行安全有效
的管理,包括但不限于虚拟网络、虚拟主机和访客虚拟机的操作系统,虚拟防火
墙、API 网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管
理等方面的安全配置。
《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、
责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安
全、工程安全、运维运营安全、生态安全。
云数据库 GaussDB
产品介绍 9 安全
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 513
9-1 华为云安全责任共担模型
9.2 身份认证与访问控制
9.2.1 服务的访问控制
身份认证
用户访问云数据库 GaussDB时支持对数据库用户进行身份验证,包含密码验证和IAM
验证两种方式。
密码验证
您需要对数据库实例进行管理,使用数据管理服务(Data Admin Service)登录
数据库时,需要对账号密码进行验证,验证成功后方可进行操作。
IAM验证
您可以使用统一身份认证服务Identity and Access Management IAM)进行
精细的权限管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以
帮助您安全地控制华为云资源的访问。您创建的IAM用户,需要通过验证用户和
密码才可以使用GaussDB资源。具体请参见创建IAM用户并登录
访问控制
权限控制
购买实例之后,您可以使用IAM为企业中的员工设置不同的访问权限,以达到不
同员工之间的权限隔离,通过IAM进行精细的权限管理。具体内容请参见权限管
VPC和子网
虚拟私有云(Virtual Private Cloud VPC)为云数据库构建隔离的、用户自主配
置和管理的虚拟网络环境,提升用户云上资源的安全性,简化用户的网络部署。
您可以在VPC中定义安全组、VPNIP地址段、带宽等网络特性,方便管理、配置
内部网络,进行安全、快捷的网络变更。
子网提供与其他网络隔离的、可以独享的网络资源,以提高网络安全性。
云数据库 GaussDB
产品介绍 9 安全
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 514
具体内容请参见创建虚拟私有云和子网
安全组
安全组是一个逻辑上的分组,为同一个虚拟私有云内具有相同安全保护需求并相
互信任的和GaussDB数据库实例提供访问策略。为了保障数据库的安全性和稳定
性,在使用GaussDB数据库实例之前,您需要设置安全组,开通需访问数据库的
IP地址和端口。
具体请参见设置安全组规则
9.3 数据保护技术
GaussDB通过多种数据保护手段和特性,保障存储在GaussDB中的数据安全可靠。
9-1 多种数据保护手段
数据保护手段 简要说明 详细介绍
传输加密
HTTPS
支持HTTPHTTPS两种传输协议,为保证数
据传输的安全性,推荐您使用更加安全的
HTTPS协议。
构造请求
数据备份 支持设置数据库的备份和恢复,来保障数据
的可靠性。
数据备份
敏感操作保护 控制台支持敏感操作保护,开启后执行删实
例等敏感操作时,系统会进行身份验证,进
一步保证GaussDB配置和数据的安全性。
敏感操作保护介绍
SSL数据加密 可以使用SSL来加密数据库GaussDB和客户
端的连接。SSL通过互相认证、使用数字签名
确保完整性、使用加密确保私密性,以实现
客户端和服务器之间的安全通讯。
SSL连接数据库
删除保护 GaussDB支持将删除的实例,加入回收站管
理。通过数据库回收站中重建实例功能,可
以恢复1~7天内删除的实例。
回收站
9.4 审计与日志
审计
云审计服务(Cloud Trace ServiceCTS),是华为云安全解决方案中专业的日志审计
服务,提供对各种云资源操作记录的收集、存储和查询功能,可用于支撑安全分析、
合规审计、资源跟踪和问题定位等常见应用场景。
CTS的详细介绍和开通配置方法,请参见CTS快速入门
通过云审计服务,您可以记录与GaussDB实例相关的操作事件,便于日后的查询、审
计和回溯。具体内容请参见支持审计的关键操作列表
云数据库 GaussDB
产品介绍 9 安全
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 515
日志
出于分析或审计等目的,用户可以开启实例的日志记录功能。当用户开启日志记录功
能后,GaussDB可以通过管理控制台下载日志。
错误日志
GaussDB支持下载错误日志。错误日志记录了数据库运行时的日志,通过错误日
志有助于分析系统中存在的问题。错误日志的详细介绍,请参见错误日志
慢日志
GaussDB支持下载慢日志。慢日志可以帮助您定位SQL语句执行慢的问题,从而
进行优化。慢日志的详细介绍,请参见慢日志
9.5 监控安全风险
云监控服务为用户提供一个针对云数据库、云服务器等资源的立体化监控平台。使您
全面了解云上的资源使用情况、业务的运行状况,并及时收到异常告警做出反应,保
证业务顺畅运行。
监控指标
GaussDB提供基于云监控服务的资源和操作监控能力,例如CPU使用率、网络吞吐量
等。支持的监控指标以及如何创建告警规则,具体请参见监控指标
监控指标周期目前支持1分钟、10秒,默认监控周期为1分钟。通过开启秒级监控可以
提高监控指标的精确值。
事件监控
事件监控提供了事件类型数据上报、查询和告警的功能。方便您将业务中的各类重要
事件或对GaussDB的操作事件收集到云监控服务,并在事件发生时进行告警。
9.6 故障恢复
GaussDB会在数据库实例的备份时段中创建数据库实例的自动备份。系统根据您指定
的备份保留期(1-732天)保存数据库实例的自动备份。具体请参见自动备份
GaussDB提供了多种方式恢复实例的数据,用以满足不同的使用场景:
恢复数据到当前实例、新实例或者已有实例
数据库实例恢复到指定时间点
多可用区
可用区指在同一区域下,电力、网络隔离的物理区域,可用区之间内网互通,不同可
用区之间物理隔离。GaussDB支持将实例的节点分别部署在多个可用区,以此来实现
AZ级高可用。
故障转移
GaussDB是一个多节点的实例,主备版实例默认只有1个主节点,分布式版实例DN
认只有一个主节点,其余节点为备节点。当主节点发生故障时,备节点会自动升级为
主节点,保证实例的可用性。
云数据库 GaussDB
产品介绍 9 安全
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 516
9.7 认证证书
合规证书
华为云服务及平台通过了多项国内外权威机构(ISO/SOC/PCI等)的安全合规认证,用
户可自行申请下载合规资质证书。
9-2 合规证书下载
资源中心
华为云还提供以下资源来帮助用户满足合规性要求,具体请查看资源中心
9-3 资源中心
销售许可证&软件著作权证书
另外,华为云还提供了以下销售许可证及软件著作权证书,供用户下载和参考。具体
请查看合规资质证书
云数据库 GaussDB
产品介绍 9 安全
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 517
9-4 销售许可证&软件著作权证书
云数据库 GaussDB
产品介绍 9 安全
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 518
10 权限管理
如果您需要对购买的GaussDB资源,为企业中的员工设置不同的访问权限,为达到不
同员工之间的权限隔离,您可以使用统一身份认证服务(Identity and Access
Management,简称IAM)进行精细的权限管理。该服务提供用户身份认证、权限分
配、访问控制等功能,可以帮助您安全的控制华为云资源的访问。
如果华为云账号已经能满足您的要求,不需要创建独立的IAM用户进行权限管理,您
可以跳过本章节,不影响您使用GaussDB服务的其它功能。
通过IAM,您可以在华为云账号中给员工创建IAM用户,并授权控制创建的IAM用户对
华为云资源的访问范围。例如您的员工中有负责软件开发的人员,您希望开发人员拥
GaussDB的使用权限,但是不希望开发人员拥有删除GaussDB等高危操作的权限,
那么您可以使用IAM为开发人员创建用户,通过授予仅能使用GaussDB,但是不允许
删除GaussDB的权限,控制开发人员对GaussDB资源的使用范围。
IAM是华为云提供权限管理的基础服务,无需付费即可使用,您只需要为您账号中的
资源进行付费。关于IAM的详细介绍,请参见IAM产品介绍
GaussDB 权限
默认情况下,管理员创建的IAM用户没有任何权限,需要将其加入用户组,并给用户
组授予策略或角色,才能使得用户组中的用户获得对应的权限,这一过程称为授权。
授权后,用户就可以基于被授予的权限对云服务进行操作。
GaussDB部署时通过物理区域划分,为项目级服务。授权时,“作用范围”需要选择
“区域级项目”,然后在指定区域(如华北-北京1)对应的项目(cn-north-1)中设
置相关权限,并且该权限仅对此项目生效;如果在“所有项目”中设置权限,则该权
限在所有区域项目中都生效。访问GaussDB时,需要先切换至授权区域。
根据授权精细程度分为角色和策略。
角色:IAM最初提供的一种根据用户的工作职能定义权限的粗粒度授权机制。该
机制以服务为粒度,提供有限的服务相关角色用于授权。由于华为云各服务之间
存在业务依赖关系,因此给用户授予角色时,可能需要一并授予依赖的其他角
色,才能正确完成业务。角色并不能满足用户对精细化授权的要求,无法完全达
到企业对权限最小化的安全管控要求。
策略:IAM最新提供的一种细粒度授权的能力,可以精确到具体服务的操作、资
源以及请求条件等。基于策略的授权是一种更加灵活的授权方式,能够满足企业
对权限最小化的安全管控要求。例如:针对GaussDB服务,管理员能够控制IAM
用户仅能对某一类数据库资源进行指定的管理操作。多数细粒度策略以API接口为
粒度进行权限拆分,GaussDB支持的API授权项请参见策略及授权项说明
云数据库 GaussDB
产品介绍 10 权限管理
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 519
10-1所示,包括了GaussDB的所有系统权限。
10-1 GaussDB 系统权限
策略名称
描述 类别
GaussDB FullAccess 云数据库GaussDB服务的
所有执行权限。
系统策略
GaussDB
ReadOnlyAccess
云数据库GaussDB服务的
只读访问权限。
系统策略
10-2列出了GaussDB常用操作与系统权限的授权关系,您可以参照该表选择合适的
系统权限。
10-2 常用操作与系统权限的关系
操作 GaussDB FullAccess GaussDB ReadOnlyAccess
创建GaussDB实例 x
删除GaussDB实例 x
查询GaussDB实例
列表
云数据库 GaussDB
产品介绍 10 权限管理
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 520
10-3 常用操作与对应授权项
操作名称 授权项 备注
创建数据库实例 gaussdb:instance:create
gaussdb:param:list
界面选择VPC、子网、
安全组需要配置:
vpc:vpcs:list
vpc:vpcs:get
vpc:subnets:get
vpc:securityGroups:get
创建包周期实例需要配
bss:order:update
bss:order:view
bss:balance:view
创建加密实例需要在项
目上配置:
kms:cmk:get
kms:cmk:list
操作失败上报事件监控
需要配置:
"ces:alarmsOnO:put"
"ces:alarms:create"
规格变更
gaussdb:instance:modifySpec 操作失败上报事件监控
需要配置:
"ces:alarmsOnO:put"
"ces:alarms:create"
扩容节点
gaussdb:instance:modifySpec 操作失败上报事件监控
需要配置:
"ces:alarmsOnO:put"
"ces:alarms:create"
磁盘扩容
gaussdb:instance:modifySpec 操作失败上报事件监控
需要配置:
"ces:alarmsOnO:put"
"ces:alarms:create"
重启数据库实例
gaussdb:instance:restart 操作失败上报事件监控
需要配置:
"ces:alarmsOnO:put"
"ces:alarms:create"
云数据库 GaussDB
产品介绍 10 权限管理
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 521
操作名称 授权项 备注
删除数据库实例 gaussdb:instance:delete 退订包周期实例需要配
置:
"bss:unsubscribe:updat
e"
操作失败上报事件监控
需要配置:
"ces:alarmsOnO:put"
"ces:alarms:create"
查询数据库实例列表 gaussdb:instance:list
实例详情 gaussdb:instance:list 实例详情界面展示
VPC、子网、安全组,
需要对应配置vpc:*:get
vpc:*:list。显示磁盘
已使用大小,需要配置
ces:*:list
修改数据库实例密码
gaussdb:instance:modify 操作失败上报事件监控
需要配置:
"ces:alarmsOnO:put"
"ces:alarms:create"
修改实例名称
gaussdb:instance:modify
绑定/解绑公网IP gaussdb:instance:modify 界面列出公网IP需要配
置:
vpc:publicIps:get
vpc:publicIps:list
操作失败上报事件监控
需要配置:
"ces:alarmsOnO:put"
"ces:alarms:create"
创建参数模板 gaussdb:param:create
gaussdb:param:list
修改参数模板 gaussdb:param:modify
获取参数模板列表 gaussdb:param:list
应用参数模板 gaussdb:param:apply 操作失败上报事件监控
需要配置:
"ces:alarmsOnO:put"
"ces:alarms:create
删除参数模板
gaussdb:param:delete
云数据库 GaussDB
产品介绍 10 权限管理
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 522
操作名称 授权项 备注
创建手动备份 gaussdb:backup:create 操作失败上报事件监控
需要配置:
"ces:alarmsOnO:put"
"ces:alarms:create"
获取备份列表
gaussdb:backup:list
修改备份策略 gaussdb:instance:modifyBacku
pPolicy
删除手动备份 gaussdb:backup:delete 操作失败上报事件监控
需要配置:
"ces:alarmsOnO:put"
"ces:alarms:create"
恢复到新实例
gaussdb:instance:create 界面选择VPC、子网、
安全组需要配置:
vpc:vpcs:list
vpc:vpcs:get
vpc:subnets:get
vpc:securityGroups:get
操作失败上报事件监控
需要配置:
"ces:alarmsOnO:put"
"ces:alarms:create
查询项目标签 gaussdb:tag:list
批量添加删除项目标
gaussdb:instance:dealTag
修改配额 gaussdb:quota:modify
查询预定义标签 gaussdb:instance:list 查询预定义标签需要配
置:
tms:resourceTags:list
查询配置日志组
- 查询配置日志组需要配
置:
lts:groups:get
查询配置日志流
- 查询配置日志流需要配
置:
lts:topics:get
云数据库 GaussDB
产品介绍 10 权限管理
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 523
操作名称 授权项 备注
存储空间自动扩容 gaussdb:instance:autoEnlargeP
olicy
如果选择自动扩容,
IAM主账号(原华为账
号)不需要添加授权
项,IAM子账号需要添
加如下IAM授权项:
iam:agencies:listAge
ncies
iam:agencies:create
Agency
iam:permissions:list
RolesForAgencyOnP
roject
iam:permissions:gra
ntRoleToGroupOnPr
oject
iam:roles:listRoles
云数据库 GaussDB
产品介绍 10 权限管理
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 524
11 约束与限制
云数据库 GaussDB在使用上有一些固定限制,用来提高实例的稳定性和安全性。
GaussDB 单副本部署实例禁止在生产环境使用,如在生产环境使用,不承诺SLA。且
在功能上有相关约束,具体约束限制请参考11-6
规格与限制
11-1 规格说明
资源类型
规格 说明
存储空间
主备版:
40GB~24000GB
分布式版:
120GB~72000GB
对于SSD云盘和极速型SSD,如果您
想提高存储空间扩容上限到10TB
请联系客服申请。
连接数
最小值为10,理论最大值
262143,实际最大值为
动态值。
不同内存规格下的最大连接数不
同,请参见最大连接数配置
IOPS
超高IO:最大50000
极速型SSD:最大
128000
SSD云盘和极速型SSD支持的IOPS
决于云硬盘(Elastic Volume
Service,简称EVS)的IO性能,具体
请参见《云硬盘产品介绍》中“
盘类型及性能介绍”中“超高IO
和“极速型SSD”的内容。
云数据库 GaussDB
产品介绍 11 约束与限制
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 525
配额限制
11-2 配额限制
资源类型
限制 说明
标签 1个实例最多支持20个标签
配额。
更多信息,请参见标签
免费备份空间 GaussDB提供了和实例磁
盘大小相同的部分免费存
储空间,用于存放您的备
份数据。
免费的存储空间是在收取了数据盘
的存储空间费用后赠送的,更多信
息,请参见GaussDB的备份是如何
收费的
自动备份保留
天数
默认为7天,可设置范围为
1732天。
更多信息,请参见设置实例级自动
备份策略
命名限制
11-3 命名限制
限制项
说明
实例名称
长度在4个到64个字符之间。
必须以字母开头(区分大小写),可以包含字母、数
字、中划线或下划线,不能包含其他特殊字符。
备份名称
长度在4~64个字符之间。
必须以字母开头,区分大小写,可以包含字母、数字、
中划线或者下划线,不能包含其他特殊字符。
参数模板名称
长度在1~64个字符之间。
区分大小写,可包含字母、数字、中划线、下划线或句
点,不能包含其他特殊字符。
云数据库 GaussDB
产品介绍 11 约束与限制
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 526
安全限制
11-4 安全限制
限制项
说明
管理员账户root权限 创建实例页面只提供管理员root用户权限。
说明
2022.08.30后,GaussDBroot用户开放了sysadmin权限。新创
建实例的root用户都将拥有sysadmin权限,而存量实例执行版本升
级后,root用户也将拥有sysadmin权限,如果需要进行版本升级,
请联系技术支持处理。
如果存量实例未进行版本升级,则管理员root用户权限为:
createrolecreatedbmonadmin。由于旧版本root权限低于完整
的管理员用户权限, 部分SQL语法/函数执行时会报权限不足,例
如:create tablespace
管理员账户root的密
长度为8~32个字符。
至少包含大写字母(A-Z),小写字母(a-z),数字
0-9),非字母数字字符(限定为~!@#%^*-_=+?,)四
类字符中的三类字符。
更多信息,请参见重置管理员密码
数据库端口
设置范围为1024~39989(其中2378~23802400
4999~5001510055005999~60016009~6010
65008015809780988181909091009180
918792001201612017200492005021731
2173232122~3212639001被系统占用不可设置)
更多信息,请参见修改数据库端口
磁盘加密 购买磁盘加密后,在实例创建成功后不可修改磁盘加密状
态,且无法更改密钥。
虚拟私有云 目前GaussDB实例创建完成后不支持切换虚拟私有云。
安全组
默认情况下,一个租户可以创建500条安全组规则。
建议一个安全组内的安全组规则不超过50条。更多信
息,请参见设置安全组规则
系统账户
创建GaussDB数据库实例时,系统会自动为实例创建如下
系统账户(用户不可使用),用于给数据库实例提供完善
的后台运维管理服务。
rdsAdmin:管理账户,拥有最高权限。
rdsBackup:备份账户,用于后台的备份。
rdsRepl:主备同步账户,用于备实例在主实例上同步数
据。
root:系统管理员账户。
rdsMetric:指标监控账户,获取GaussDB的性能指标,
用于上报到Cloud Eye供租户查看GaussDB运行情况。
云数据库 GaussDB
产品介绍 11 约束与限制
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 527
实例操作限制
11-5 实例操作限制
功能
使用限制
数据库访问
如果GaussDB实例未开通公网访问,则该实例必须与云
主机弹性云服务器处在同一个虚拟私有云子网内才能相
互访问。
弹性云服务器必须处于目标GaussDB实例所属安全组允
许访问的范围内。
如果GaussDB实例与弹性云服务器处于不同的安全组,
系统默认不能访问。需要在GaussDB的安全组添加一条
“入”的访问规则。
GaussDB实例的默认端口为8000
数据库端口支持创建时设置,后期可修改。
部署 实例所部署的服务器,对用户都不可见,即只允许应用程
序通过IP地址和端口访问数据库。
重启GaussDB实例 无法通过命令行重启,必须通过GaussDB的管理控制台操
作重启实例。
GaussDB备份查看 GaussDB实例在对象存储服务上的备份文件,对用户不可
见。
变更配置
默认不支持将规格参数变小,如需要将规格参数变小,
您可以联系华为云技术支持,由华为云工程师给出分析
评估后进行处理。
规格变更前,须确保实例状态正常。在实例异常、节点
异常、磁盘满的情况下不允许进行规格变更。
高可用(12备)部署形态下,规格变更过程中会进行
主备倒换,主备倒换过程中会有1min左右的业务中断。
单副本的部署形态下,规格变更过程中会进行中断重
启,中断重启过程中会有5~10min的业务中断。
修改CPU/内存后,将会重启数据库实例,重启数据库实
例将导致数据库业务短暂中断。
故障切换 对于主备版,主节点切换备节点,大概有10s左右服务不可
用。
数据恢复 为避免数据丢失,建议数据恢复前备份重要数据。
存储空间 若实例的磁盘空间已满,此时不可进行数据库写入操作,
您需要扩容磁盘使实例恢复到正常状态。建议定期检查存
储空间。
性能优化
性能调优过程有时候需要重启集群,可能会中断当前业
务。
云数据库 GaussDB
产品介绍 11 约束与限制
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 528
功能 使用限制
回收站管理
支持将退订后的包年/包月实例和删除的按需实例,加入
回收站管理。通过数据库回收站中重建实例功能,可以
恢复1~7天内删除的实例。
回收站策略机制默认开启,默认保留时间为7天,且不
可关闭。
11-6 主备版单副本实例的基本功能限制
功能 3.0以下版本是
否支持
3.0以上版本是否支持
创建实例 Y Y
重启实例 Y Y
参数修改 Y Y
参数应用 Y Y
重置密码 Y Y
全量备份 N Y
差量备份 N Y
删除备份 N Y
修改备份策
N Y
恢复到当前
实例
N Y
恢复到新实
N Y
恢复到已有
实例
N Y
磁盘扩容 Y Y
规格变更 Y Y
热补丁升级 N Y
就地升级 Y(仅支持升级
3.0以上版
)
Y
灰度升级 N Y(3.207及以上版本支持)
查看监控指
Y Y
云数据库 GaussDB
产品介绍 11 约束与限制
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 529
功能 3.0以下版本是
否支持
3.0以上版本是否支持
实例删除 Y Y
回收站 N Y
查询磁盘使
Y Y
创建数据库 Y Y
查询数据库 Y Y
创建schema
及用户
Y Y
删除schema
及用户
Y Y
执行数据库
操作
Y Y
云数据库 GaussDB
产品介绍 11 约束与限制
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 530
12 GaussDB 与其他服务的关系
GaussDB与其他服务的关系如12-1
12-1 与其他服务的关系
相关服务 交互功能
弹性云服务器
ECS
GaussDB服务通过弹性云服务器(Elastic Cloud Server,简称
ECS)远程连接GaussDB可以有效的降低应用响应时间、节省
公网流量费用。
虚拟私有云
VPC
对您的GaussDB实例进行网络隔离和访问控制。
对象存储服务
OBS
存储GaussDB实例的自动和手动备份数据。
云监控服务
Cloud Eye
云监控服务是一个开放性的监控平台,帮助用户实时监测
GaussDB资源的动态。云监控服务提供多种告警方式以保证及
时预警,为您的服务正常运行保驾护航。
云审计服务
CTS
云审计服务(Cloud Trace Service,简称CTS),为用户提供
云服务资源的操作记录,供您查询、审计和回溯使用。
企业管理服务
EPS
企业管理服务(Enterprise Project Management Service,简
EPS)提供统一的云资源按企业项目管理,以及企业项目内
的资源管理、成员管理。
标签管理服务
TMS
标签管理服务(Tag Management Service,简称TMS)是一
种快速便捷将标签集中管理的可视化服务,提供跨区域、跨服
务的集中标签管理和资源分类功能。
数据管理服务
DAS
使用数据管理服务(Data Admin Service,简称DAS),通过
专业优质的可视化操作界面,提高数据管理工作的效率和安
全。
云数据库 GaussDB
产品介绍 12 GaussDB 与其他服务的关系
文档版本 01 (2024-08-28) 版权所有 © 华为云计算技术有限公司 531