华为云用户手册

  • 其它语句 序号 概述 详细语法说明 差异 1 事务相关语法 数据库默认隔离级别 M-Compatibility默认隔离级别为READ COMMITTED,MySQL默认隔离级别为REPEATABLE READ。 M-Compatibility隔离级别只有READ COMMITTED REPEATABLE READ生效。 2 事务相关语法 事务嵌套 M-Compatibility中嵌套事务不会自动提交,MySQL会自动提交。 3 事务相关语法 自动提交 M-Compatibility使用GaussDB存储,继承GaussDB事务机制,事务中执行DDL,DCL不会自动提交。MySQL在DDL、DCL、管理类语句,锁相关语句会自动提交。 4 事务相关语法 报错后需rollback M-Compatibility事务中报错,需要执行rollback,MySQL无限制。 5 事务相关语法 锁机制 M-Compatibility锁机制只能在事务块中使用,MySQL无限制。 6 锁机制 锁机制 MySQL获取read锁后,当前会话无法进行写操作,M-Compatibility获取read锁后,当前会话可以进行写操作。 MySQL给表上锁后,读取其他表报错,M-Compatibility无限制。 MySQL同一会话中获取同一个表的锁,会自动释放上一个锁,并提交事务,M-Compatibility无该机制。 M-Compatibility中LOCK TABLE只能在一个事务块的内部有用,且无UNLOCK TABLE命令,锁总是在事务结束时释放。 父主题: SQL
  • 其它函数 序号 Oracle数据库 GaussDB数据库 1 聚合函数 支持 2 分析函数 支持 3 对象引用函数 不支持 4 模型函数 不支持 5 OLAP函数 不支持 6 数据盒功能函数 不支持 7 关于用户定义的函数 支持 表1 聚合函数 序号 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 支持。 - 26 WM_CONCAT 支持,有差异。 GaussDB中使用LISTAGG、STRING_AGG函数,兼容Oracle此功能。 表2 分析函数 序号 Oracle数据库函数 GaussDB数据库是否支持 1 FIRST_VALUE 支持 2 LAG 支持 3 LAST_VALUE 支持 4 LEAD 支持 5 NTH_VALUE 支持 6 NTILE 支持 7 ROW_NUMBER 支持 8 RATIO_TO_REPORT 支持 父主题: 系统函数
  • 流程控制函数 表1 流程控制函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 IF() 支持。 当第一个参数为TRUE且第三个参数表达式中存在隐式类型转换错误,或者第一个参数为FALSE且第二个参数表达式中存在隐式类型转换错误时,MySQL会忽略该错误,GaussDB会提示类型转换错误。 2 IFNULL() 支持。 第一个参数不为NULL且第二个参数表达式中存在隐式类型转换错误时,MySQL会忽略该错误,GaussDB会提示类型转换错误。 3 NULLIF() 支持,有差异。 函数返回值类型在MySQL5.7和MySQL8.0中存在差异,考虑到MySQL8.0更合理,因此函数返回值类型兼容MySQL8.0。 父主题: 系统函数
  • 排序规则 GaussDB数据库支持指定库、模式、表或列的排序规则,支持的范围如下。 排序规则差异说明: 当前仅有字符串类型、部分二进制类型支持指定排序规则,其他类型不支持指定排序规则,可以通过查询pg_type系统表中类型的typcollation属性不为0来判断该类型支持字符序。MySQL中所有类型可以指定字符序,但除字符串、二进制类型其他排序规则无实际意义。 当前排序规则(除binary外)仅支持在其对应字符集与库级字符集一致时可以指定,GaussDB数据库中,字符集必须与数据库的字符集一致,且不支持表内多种字符集混合使用。 utf8mb4字符集下默认字符序为utf8mb4_general_ci,与MySQL5.7保持一致。 GaussDB中utf8和utf8mb4为同一个字符集。 表1 排序规则列表 序号 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 支持 父主题: MySQL数据库兼容性B模式
  • 二进制数据类型 表1 二进制数据类型 序号 MySQL数据库 GaussDB数据库 差异 1 BINARY[(M)] 不支持 - 2 VARBINARY(M) 不支持 - 3 TINYBLOB 支持 取值范围:不支持长度限制255字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。 输入格式:不支持转义字符输入,不支持""双引号输入。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”)。 4 BLOB 支持 取值范围:不支持长度限制65535字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。MySQL支持。 输入格式:不支持转义字符输入,不支持""双引号输入。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 5 MEDIUMBLOB 支持 取值范围:不支持长度限制16777215字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。MySQL支持。 输入格式:不支持转义字符输入,不支持""双引号输入。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 6 LONGBLOB 支持 取值范围:只支持不超过1G,具体范围参照bytea数据类型集中式和分布式规格。 输入格式:不支持转义字符输入,不支持""双引号输入。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 7 BIT[(M)] 不支持 - 父主题: 数据类型
  • 排序规则 GaussDB数据库支持指定模式、表或列的排序规则,支持的范围如下。 排序规则差异说明: 当前仅有字符串类型、部分二进制类型支持指定排序规则,其他类型不支持指定排序规则,可以通过查询pg_type系统表中类型的typcollation属性不为0来判断该类型支持字符序。MySQL中所有类型可以指定字符序,但除字符串、二进制类型其他排序规则无实际意义。 当前排序规则仅支持在其对应字符集与库级字符集一致时可以指定。 utf8mb4字符集下默认字符序为utf8mb4_general_ci,与MySQL5.7保持一致,utf8mb4_0900_ai_ci为utf8mb4的非默认字符序。 GaussDB中utf8和utf8mb4为同一个字符集。 表1 排序规则列表 序号 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 支持 父主题: MySQL数据库兼容MySQL模式
  • 聚合函数 表1 聚合函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 AVG() 支持,有差异 GaussDB中指定DINSTINCT且SQL语句包含GROUP BY子句时,不保证结果的顺序。 GaussDB中当expr中的列为BIT、BOOL、整数类型,且所有行的和超过BIGINT的范围时,会发生溢出导致整数翻转。 2 BIT_AND() 支持 - 3 BIT_OR() 支持 - 4 BIT_XOR() 支持 - 5 COUNT() 支持,有差异 GaussDB中指定DINSTINCT且SQL语句包含GROUP BY子句时,不保证结果的顺序。 6 GROUP_CONCAT() 支持,有差异 GaussDB中指定DINSTINCT且SQL语句包含GROUP BY子句时,不保证结果的顺序。 GaussDB中当GROUP_CONCAT参数中同时有DISTINCT和ORDER BY语法时,所有ORDER BY后的表达式必须也在DISTINCT的表达式之中。 GaussDB中GROUP_CONCAT(... ORDER BY 数字)不代表按照第几个参数的顺序,数字只是一个常量表达式,相当于不排序。 GaussDB中使用参数group_concat_max_len限制GROUP_CONCAT最大返回长度,超长截断,目前能返回的最大长度是1073741823,小于MySQL。 7 MAX() 支持,有差异 GaussDB中指定DINSTINCT且SQL语句包含GROUP BY子句时,不保证结果的顺序。 8 MIN() 支持,有差异 GaussDB中指定DINSTINCT且SQL语句包含GROUP BY子句时,不保证结果的顺序。 9 SUM() 支持,有差异 GaussDB中指定DINSTINCT且SQL语句包含GROUP BY子句时,不保证结果的顺序。 GaussDB中当expr中的列为BIT、BOOL、整数类型,且所有行的和超过BIGINT的范围时,会发生溢出导致整数翻转。 父主题: 系统函数
  • 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数据库仍存在部分差异。 父主题: MySQL数据库兼容性B模式
  • 条件 GaussDB数据库兼容Oracle大部分条件。 表1 条件 序号 Oracle数据库 GaussDB数据库 差异 1 比较条件 支持,有差异。 语句中存在ANY、SOME、ALL操作符时存在差异,Oracle支持对list对象进行操作,而GaussDB中需要将list对象转换成数组表达式的形式后再进行操作。 2 浮点条件 不支持。 - 3 逻辑条件 支持。 - 4 模型条件 不支持。 - 5 多集合条件 不支持。 - 6 模式匹配条件 支持。 - 7 NULL值条件 支持。 - 8 XML条件 不支持。 - 9 SQL/JSON条件 部分支持,有差异。 GaussDB不支持IS JSON条件和JSON_TEXTCONTAINS条件。 GaussDB中JSONB_EQ条件同等于Oracle中JSON_EQUAL条件,但GaussDB不支持ERROR子句。 GaussDB中JSONB_EXISTS条件同等于Oracle中JSON_EXISTS条件,但GaussDB不支持ERROR子句、EMPTY子句和PASSING子句。 10 复合条件 支持。 - 11 BETWEEN条件 支持。 - 12 EXISTS条件 支持。 - 13 IN条件 支持。 - 14 IS OF TYPE条件 不支持。 - 父主题: 分布式
  • 其它函数 序号 Oracle数据库 GaussDB数据库 1 聚合函数 支持 2 分析函数 支持 3 对象引用函数 不支持 4 模型函数 不支持 5 OLAP函数 不支持 6 数据盒功能函数 不支持 7 关于用户定义的函数 支持 表1 聚合函数 序号 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 支持。 - 26 WM_CONCAT 支持,有差异。 GaussDB中使用LISTAGG、STRING_AGG函数,兼容Oracle此功能。 表2 分析函数 序号 Oracle数据库函数 GaussDB数据库是否支持 1 FIRST_VALUE 支持 2 LAG 支持 3 LAST_VALUE 支持 4 LEAD 支持 5 NTH_VALUE 支持 6 NTILE 支持 7 ROW_NUMBER 支持 8 RATIO_TO_REPORT 支持 父主题: 系统函数
  • 系统函数 GaussDB数据库兼容绝大多数MySQL的系统函数,但存在部分差异。如未列出,函数行为默认为GaussDB原生行为。 GaussDB MySQL兼容性的绝大部分系统函数目前均存在返回值与MySQL精度不一致(结果后面0的位数)的问题,这是由于部分数据类型在某些场景下仍存在精度丢失问题,无法正确获取精度,导致目前部分函数未完全做到适配。 流量控制函数 日期和时间函数 字符串函数 强制转换函数 加密函数 信息函数 JSON函数 聚合函数 数字操作函数 其他函数 父主题: MySQL数据库兼容性B模式
  • SQL GaussDB数据库兼容绝大多数MySQL语法,但存在部分差异。本章节介绍GaussDB数据库当前支持的MySQL语法。 部分关键字在MySQL可以做标识符但M-Compatibility不可以或存在限制,以下为限制做标识符列表 表1 限制做标识符列表 关键字类型 关键字 约束 保留(可以是类型或函数) COLLATION、COMPACT 除函数和变量,不可以作为其他数据库标识符。 非保留(不能是类型或函数) BIT、BOOLEAN、COALESCE、DATE、NATIONAL、NCHAR、NONE、NUMBER、TEXT、TIME、TIMESTAMP、TIMESTAMPDIFF 不可以作为函数或变量的标识符。 保留 ANY、ARRAY、BUCKETS、DO、END、LESS、MODIFY、OFFSET、ONLY、RETURNING、SOME、USER 不可以作为任意数据库标识符。 关键字 标识符 DDL DML DCL 其它语句 用户与权限 系统表和系统视图 父主题: MySQL数据库兼容性M-Compatibility模式
  • 数字操作函数 表1 数字操作函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 ABS() 支持。 - 2 ACOS() 支持。 - 3 ASIN() 支持。 - 4 ATAN() 支持。 - 5 ATAN2() 支持。 - 6 CEILING() 支持。 - 7 COS() 支持。 - 8 DEGREES() 支持。 - 9 EXP() 支持。 - 10 FLOOR() 支持,有差异。 FLOOR函数的返回值类型与MySQL的有差异:入参类型为INT,GaussDB返回值类型为BIGINT,MySQL返回值类型为INT。 11 LN() 支持。 - 12 LOG() 支持。 - 13 LOG10() 支持。 - 14 LOG2() 支持。 - 15 PI() 支持。 PI函数的返回值精度与MySQL的有差异:MySQL中PI函数的结果仅保留四舍五入之后的小数后6位,而GaussDB的结果会保留四舍五入之后的小数后15位。 16 POW() 支持。 - 17 POWER() 支持。 - 18 RAND() 支持。 - 19 SIGN() 支持。 - 20 SIN() 支持。 - 21 SQRT() 支持。 - 22 TAN() 支持。 - 23 TRUNCATE() 支持。 - 父主题: 系统函数
  • 条件 GaussDB数据库兼容Oracle大部分条件。 表1 条件 序号 Oracle数据库 GaussDB数据库 差异 1 比较条件 支持,有差异。 语句中存在ANY、SOME、ALL操作符时存在差异,Oracle支持对list对象进行操作,而GaussDB中需要将list对象转换成数组表达式的形式后再进行操作。 2 浮点条件 不支持。 - 3 逻辑条件 支持。 - 4 模型条件 不支持。 - 5 多集合条件 不支持。 - 6 模式匹配条件 支持。 - 7 NULL值条件 支持。 - 8 XML条件 不支持。 - 9 SQL/JSON条件 部分支持,有差异。 GaussDB不支持IS JSON条件和JSON_TEXTCONTAINS条件。 GaussDB中JSONB_EQ条件同等于Oracle中JSON_EQUAL条件,但GaussDB不支持ERROR子句。 GaussDB中JSONB_EXISTS条件同等于Oracle中JSON_EXISTS条件,但GaussDB不支持ERROR子句、EMPTY子句和PASSING子句。 10 复合条件 支持。 - 11 BETWEEN条件 支持。 - 12 EXISTS条件 支持。 - 13 IN条件 支持。 - 14 IS OF TYPE条件 不支持。 - 父主题: 主备版
  • Database和Schema设计 MySQL的数据对象包括DATABASE、TABLE、INDEX、VIEW、TRIGGER、PROC等,MySQL的对象层次跟GaussDB的对应关系是从上至下且1对多包含关系。如下图所示: 图1 MySQL和GaussDB中Database和Schema之间的差异 在MySQL中Database和Schema是同义词;而在GaussDB中,一个Database 下可以有多个Schema。在该特性中,每个MySQL中的Database都被映射到GaussDB的一个Schema。 在MySQL中,INDEX从属于一个TABLE,但在GaussDB中,INDEX从属于一个Schema。这个差异导致INDEX名在GaussDB中要求在Schema内唯一,但在MySQL中仅要在在一个表内唯一。这个差异将作为当前约束予以保留。
  • 数字操作函数 表1 数字操作函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 log2() 支持 小数位显示与MySQL存在差异,受GaussDB浮点数据类型限制,可通过参数extra_float_digits控制小数位个数显示; 由于输入精度内部处理差异,GaussDB与MySQL会存在结果计算差异; 支持数据类型有:bigint、int16、int、smallint 、tinyint整数类型;bigint unsigned、integer unsigned、smallint unsigned、tinyint unsigned无符号整数类型:numeric、real浮点数类型;character、character varying、clob、text字符串类型,仅支持纯数字整数字符串;set类型;NULL空类型。 2 log10() 支持 小数位显示与MySQL存在差异,受GaussDB浮点数据类型限制,可通过参数extra_float_digits控制小数位个数显示; 由于输入精度内部处理差异,GaussDB与MySQL会存在结果计算差异; 支持数据类型有:bigint、int16、int、smallint 、tinyint整数类型;bigint unsigned、integer unsigned、smallint unsigned、tinyint unsigned无符号整数类型:numeric、real浮点数类型;character、character varying、clob、text字符串类型,仅支持纯数字整数字符串;set类型;NULL空类型。 父主题: 系统函数
  • 获取结果集中的数据 ResultSet对象提供了丰富的方法,以获取结果集中的数据。获取数据常用的方法如表1所示,其他方法请参考JDK官方文档。 表1 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型数据。 -
  • 二进制数据类型 表1 二进制数据类型 序号 MySQL数据库 GaussDB数据库 差异 1 BINARY[(M)] 不支持 - 2 VARBINARY(M) 不支持 - 3 TINYBLOB 支持 取值范围:不支持长度限制255字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。 输入格式:不支持转义字符输入,不支持""双引号输入。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”)。 4 BLOB 支持 取值范围:不支持长度限制65535字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。MySQL支持。 输入格式:不支持转义字符输入,不支持""双引号输入。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符与、或、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 5 MEDIUMBLOB 支持 取值范围:不支持长度限制16777215字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。MySQL支持。 输入格式:不支持转义字符输入,不支持""双引号输入。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符与、或、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 6 LONGBLOB 支持 取值范围:只支持不超过1G,具体范围参照bytea数据类型集中式和分布式规格。 输入格式:不支持转义字符输入,不支持""双引号输入。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”)。 7 BIT[(M)] 不支持 - 父主题: 数据类型
  • JSON函数 json函数差异说明: 对于json函数和其他字符入参函数来说,如果含有转义字符的输入,默认情况下会与MySQL有一定差异,需要设置GUC参数set standard_conforming_strings= off;的情况下,对于转义字符的场景才会与MySQL兼容,但是会产生非标准字符输入的warning告警,在转义字符中\t、\u与转义数字与MySQL有差异。JSON_UNQUOTE()函数该场景下已做兼容,不设置GUC参数时,仍与MySQL兼容,且不会报警。 在处理超长数字(数字的字符长度超过64)时,GaussDB的json函数会将数字解析为一个double处理,并使用科学计数法计数。和MySQL的非json类型入参相同。但是在json类型入参时,由于json类型未完全与MySQL兼容,此场景下会产生差异。MySQL会完整显示数字(并且当数字长度超过82时,MySQL会给出错误的结果。),GaussDB依然将超长数字解析为一个double精度的值。考虑到超长数字内部都是使用浮点数进行储存,进行运算时无论GaussDB还是MySQL都会有精度丢失,建议您使用字符串来储存超长数字。 gaussdb=# select json_insert('[1, 4, 99999999999999999999999999999999999999999999999999999999999999999999999999]','$[6]',json_insert('[1,4]','$[5]',99999999999999999999999999999999999999999999999999999999999999999999999999)); json_insert ------------------------------ [1, 4, 1e+74, [1, 4, 1e+74]] (1 row) 表1 JSON函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 JSON_APPEND() 支持 - 2 JSON_ARRAY() 支持 - 3 JSON_ARRAY_APPEND() 支持 - 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返回的是json,MySQL返回的是varchar或者text。 15 JSON_REMOVE() 支持 - 16 JSON_REPLACE() 支持 - 17 JSON_SEARCH() 支持 返回值与MySQL有差异,GaussDB返回的是text,MySQL返回的是json。 18 JSON_SET() 支持 - 19 JSON_TYPE() 支持 数值类型的json值统一识别为number,与MySQL有差异。 20 JSON_UNQUOTE() 支持 - 21 JSON_VALID() 支持 - 父主题: 系统函数
  • 控制语句 表1 条件语句 序号 Oracle数据库 GaussDB数据库 1 IF THEN 支持 2 IF THEN ELSE 支持 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;] 支持 表2 LOOP循环语句 序号 Oracle数据库 GaussDB数据库 1 [ label ] LOOP statements END LOOP [ label ]; 支持 2 EXIT; 支持 3 EXIT WHEN; 支持 4 CONTINUE; 支持 5 CONTINUE WHEN; 支持 表3 FOR循环语句 序号 Oracle数据库 GaussDB数据库 差异 1 [ label ] FOR index IN [ REVERSE ] lower_bound..upper_bound LOOP statements END LOOP [ label ]; 支持,有差异。 GaussDB使用REVERSE关键字时,lower_bound必须大于等于upper_bound,否则循环体不会被执行。 2 EXIT WHEN; 支持。 - 3 CONTINUE WHEN; 支持。 - 表4 WHILE LOOP循环语句 序号 Oracle数据库 GaussDB数据库 1 [ label ] WHILE condition LOOP statements END LOOP [ label ]; 支持 表5 GOTO语句 序号 Oracle数据库 GaussDB数据库 1 GOTO 支持 表6 NULL语句 序号 Oracle数据库 GaussDB数据库 1 NULL 支持 父主题: PL/SQL语言
  • 事务相关的GUC参数 表2 事务相关的GUC参数差异 序号 GUC参数 功能 差异 1 autocommit 设置事务自动提交模式。 M-Compatibility中当前版本不支持SET autocommit = off。 2 transaction_isolation 在M-Compatibility中是设置当前事务的隔离级别。 在MySQL中是设置会话级事务的隔离级别。 在M-Compatibility中,通过使用SET命令,只能改变当前事务的隔离级别。如果想要改变会话级的隔离级别,可以使用default_transaction_isolation。 在MySQL中,通过使用SET命令,可以改变会话级的事务隔离级别。 支持范围差异,M-Compatibility中当前版本支持以下隔离级别设置,对大小写和空格敏感: READ COMMITTED READ UNCOMMITTED REPEATABLE READ SERIALIZABLE DEFAULT (设置和会话中默认隔离级别一样) MySQL中支持以下隔离级别设置,对大小写不敏感,对空格敏感: READ-UNCOMMITTED READ-COMMITTED REPEATABLE-READ SERIALIZABLE 在GaussDB中,新事务的transaction_isolation值将被初始化为default_transaction_isolation的值。 3 tx_isolation 设置事务的隔离级别; tx_isolation和transaction_isolation是同义词。 M-Compatibility中当前不支持。 4 default_transaction_isolation 设置事务的隔离级别。 M-Compatibility中通过SET设置会改变会话级事务隔离级别。 MySQL中不支持该系统参数。 5 transaction_read_only 设置事务的访问模式。 在M-Compatibility中,通过使用SET命令,只能改变当前事务的访问模式。如果想要改变会话级的访问模式,可以使用default_transaction_read_only。 在MySQL中,通过使用SET命令,可以改变会话级的事务隔离级别。 在GaussDB中,新事务的transaction_read_only值将被初始化为default_transaction_read_only的值。 6 tx_read_only 设置事务的访问模式。tx_read_only和transaction_read_only是同义词。 M-Compatibility中当前不支持。 7 default_transaction_read_only 设置事务的访问模式。 M-Compatibility中通过SET设置会改变会话级事务访问模式;MySQL中不支持该系统参数。
  • START TRANSACTION差异 M-Compatibility中,START TRANSACTION开启事务时,同时支持设置隔离级别;同时设置多次隔离级别/事务访问模式时,只有最后一个会生效;当前版本不支持立即开启一致性快照;多个事务特性支持空格和逗号分割。 MySQL的start transaction 开启事务时,不支持设置隔离级别,不支持设置多次事务访问模式;多个事务特性只支持逗号分割。 -- 开启事务设置隔离级别。 m_db=# START TRANSACTION ISOLATION LEVEL READ COMMITTED; m_db=# COMMIT; -- 多次设置访问模式。 m_db=# START TRANSACTION READ ONLY, READ WRITE; m_db=# COMMIT;
  • 隐式提交的语句 M-Compatibility使用GaussDB存储,继承GaussDB事务机制,事务中执行DDL、DCL不会自动提交。 MySQL在DDL、DCL、管理类语句,锁相关语句会自动提交。 -- 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; -- 不存在该表。
  • 嵌套事务 嵌套事务指在事务块中开启新事务。 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之后才可以执行。
  • SET TRANSACTION差异 M-Compatibility中,SET TRANSACTION同时设置多次隔离级别/事务访问模式时,只有最后一个会生效;多个事务特性支持使用空格和逗号分割。 MySQL中SET TRANSACTION不允许设置多次隔离级别/事务访问模式;多个事务特性只支持使用逗号分割。 表1 SET TRANSACTION差异 序号 语法 功能 差异 1 SET TRANSACTION 设置事务特性。 M-Compatibility中,SET TRANSACTION在会话级别生效;MySQL中SET TRANSACTION在下一个事务生效。 2 SET SESSION TRANSACTION 设置会话级事务特性。 - 3 SET GLOBAL TRANSACTION 设置全局会话级事务特性,该特性适用于后续会话,对当前会话无影响。 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
  • 控制语句 表1 条件语句 序号 Oracle数据库 GaussDB数据库 1 IF THEN 支持 2 IF THEN ELSE 支持 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;] 支持 表2 LOOP循环语句 序号 Oracle数据库 GaussDB数据库 1 [ label ] LOOP statements END LOOP [ label ]; 支持 2 EXIT; 支持 3 EXIT WHEN; 支持 4 CONTINUE; 支持 5 CONTINUE WHEN; 支持 表3 FOR循环语句 序号 Oracle数据库 GaussDB数据库 差异 1 [ label ] FOR index IN [ REVERSE ] lower_bound..upper_bound LOOP statements END LOOP [ label ]; 支持,有差异。 GaussDB使用REVERSE关键字时,lower_bound必须大于等于upper_bound,否则循环体不会被执行。 2 EXIT WHEN; 支持。 - 3 CONTINUE WHEN; 支持。 - 表4 WHILE LOOP循环语句 序号 Oracle数据库 GaussDB数据库 1 [ label ] WHILE condition LOOP statements END LOOP [ label ]; 支持 表5 GOTO语句 序号 Oracle数据库 GaussDB数据库 1 GOTO 支持 表6 NULL语句 序号 Oracle数据库 GaussDB数据库 1 NULL 支持 父主题: PL/SQL语言
  • 数据类型兼容性 表1 其他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 支持。 - 父主题: PL/SQL语言
  • 数值数据类型 表1 整数类型 序号 MySQL数据库 GaussDB数据库 差异 1 BOOL 支持,存在差异 输出格式:GaussDB中SELECT TRUE/FALSE输出结果为t/f,MySQL为1/0。 MySQL:BOOL/BOOLEAN类型实际映射为TINYINT类型。 2 BOOLEAN 支持,存在差异 3 TINYINT[(M)] [UNSIGNED] 支持,存在差异 详细请参见说明。 4 SMALLINT[(M)] [UNSIGNED] 支持,存在差异 详细请参见说明。 5 MEDIUMINT[(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] 支持,存在差异 详细请参见说明。 输入格式: 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。 表2 任意精度类型 序号 MySQL数据库 GaussDB数据库 差异 1 DECIMAL[(M[,D])] 支持,存在差异 MySQL decimal用一个9*9的数组存储数值,整数部分和小数部分分开存储,超过该长度时优先截小数部分。GaussDB只会在整数位数超过81位时截断。 2 NUMERIC[(M[,D])] 支持,存在差异 3 DEC[(M[,D])] 支持,存在差异 4 FIXED[(M[,D])] 支持,存在差异 表3 浮点类型 序号 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值分区策略分区表。 父主题: 数据类型
  • SQL查询和子查询 GaussDB数据库兼容除分层查询以外的SQL查询和子查询。 表1 SQL查询和子查询 序号 Oracle数据库 GaussDB数据库 差异 1 创建简单查询 支持。 - 2 分层查询 支持,有差异。 GaussDB仅支持Oracle中的CONNECT_BY_FILTERING 模式,不支持CONNECT_BY_NOFILTERING。 3 UNION [ALL],INTERSECT,减运算符 支持。 - 4 查询结果排序 支持,有差异。 GaussDB查询不包含分组,且目标列同时包含聚集函数和集合返回函数时,不忽略对集合返回函数列的排序。 5 Joins 支持,有差异。 GaussDB只支持和Oracle的Join Types, 如 left/right、self 、natural、full outer join等。不支持 In-Memory Join Group 等 Join Optimizations方法。 6 使用子查询 支持。 - 7 嵌套子查询的解嵌套 支持,有差异。 GaussDB不支持显式指定HASH_AJ或MERGE_AJ。 8 分布式查询 支持,有差异。 GaussDB需要显式指定DBLINK查询。 9 聚集函数嵌套 支持。 - 父主题: 主备版
  • 字符串数据类型 表1 字符串数据类型 序号 MySQ数据库 GaussDB数据库 差异 1 CHAR[(M)] 支持 输入格式 GaussDB自定义函数参数和返回值不支持长度校验,存储过程参数不支持长度校验,同时也不支持在PAD_CHAR_TO_FULL_LENGTH打开时补齐正确的空格,MySQL支持。 GaussDB不支持转义字符输入,不支持""双引号输入,MySQL支持。 语法 GaussDB的 Cast(expr as char)语法无法根据输入的字符串长度转成对应的类型,只支持转成varchar类型。不支持cast(‘’ as char) 和cast(‘’ as char(0))将空串转成char(0)类型。MySQL支持按长度转成对应的类型。 操作符 GaussDB能正常转成浮点型的字符串与整型值加减乘除求余,返回值是整型值,MySQL是返回浮点型。 GaussDB除以0会报错,MySQL返回null。 “~”:GaussDB返回负数,MySQL返回8字节无符号整数。 “^”:GaussDB表示次方幂,MySQL表示按位异或。 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表示按位异或。 4 TEXT 支持 输入格式 GaussDB不支持长度限制65535字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。MySQL支持。 GaussDB不支持转义字符输入,不支持""双引号输入,MySQL支持。 操作符 GaussDB能正常转成浮点型的字符串与整型值加减乘除求余,返回值是整型值,MySQL是返回浮点型。 GaussDB除以0会报错,MySQL返回null。 “~”:GaussDB返回负数,MySQL返回8字节无符号整数。 “^”:GaussDB表示次方幂,MySQL表示按位异或。 5 MEDIUMTEXT 支持 输入格式 GaussDB不支持长度限制16777215字节(最大不超过1G),不支持超限后,根据严格宽松模式报错和截断告警。MySQL支持。 GaussDB不支持转义字符输入,不支持""双引号输入,MySQL支持。 操作符 GaussDB能正常转成浮点型的字符串与整型值加减乘除求余,返回值是整型值,MySQL是返回浮点型。 GaussDB除以0会报错,MySQL返回null。 “~”:GaussDB返回负数,MySQL返回8字节无符号整数。 “^”:GaussDB表示次方幂,MySQL表示按位异或。 6 LONGTEXT 支持 输入格式 GaussDB只支持不超过1G,MySQL支持4G-1字节长度。 GaussDB不支持转义字符输入,不支持""双引号输入,MySQL支持。 操作符 GaussDB能正常转成浮点型的字符串与整型值加减乘除求余,返回值是整型值,MySQL是返回浮点型。 GaussDB除以0会报错,MySQL返回null。 “~”:GaussDB返回负数,MySQL返回8字节无符号整数。 “^”:GaussDB表示次方幂,MySQL表示按位异或。 7 ENUM('value1','value2',...) 不支持 - 8 SET('value1','value2',...) 支持 - 父主题: 数据类型
共100000条