华为云用户手册

  • 数字操作函数 表1 数字操作函数列表 MySQL数据库 GaussDB数据库 差异 ABS() 支持 - ACOS() 支持 - ASIN() 支持 - ATAN() 支持 - ATAN2() 支持 - CEILING() 支持,存在差异 部分操作结果类型与MySQL不一致。对于推导结果类型为NUMERIC或者整型的,如果能够被整型类型存储,MySQL中结果类型为整型; GaussDB 中类型仍然为NUMERIC类型。 COS() 支持 - DEGREES() 支持 - EXP() 支持 - FLOOR() 支持,存在差异 FLOOR函数的返回值类型与MySQL的有差异:入参类型为INT,GaussDB返回值类型为BIGINT,MySQL返回值类型为INT。 部分操作结果类型与MySQL不一致。对于推导结果类型为NUMERIC或者整型的,如果能够被整型类型存储,MySQL中结果类型为整型;GaussDB中类型仍然为NUMERIC类型。 LN() 支持 - LOG () 支持 - LOG10() 支持 - LOG2() 支持 - PI() 支持,存在差异 PI函数的返回值精度与MySQL的有差异:MySQL中PI函数的结果仅保留四舍五入之后的小数后6位,而GaussDB的结果会保留四舍五入之后的小数后15位。 POW() 支持 - POWER() 支持 - RAND() 支持 - SIGN() 支持 - SIN() 支持 - SQRT() 支持 - TAN() 支持 - TRUNCATE() 支持 - CEIL() 支持 - 父主题: 系统函数
  • 聚合函数 表1 聚合函数列表 MySQL数据库 GaussDB数据库 差异 AVG() 支持,存在差异 GaussDB中指定DISTINCT且SQL语句包含GROUP BY子句时,不对结果进行排序,MySQL会进行排序。 GaussDB中当expr中的列为BIT、BOOL、整数类型,且所有行的和超过BIGINT的范围时,会发生溢出导致整数翻转。 BIT_AND() 支持 - BIT_OR() 支持 - BIT_XOR() 支持 - COUNT() 支持,存在差异 GaussDB中指定DISTINCT且SQL语句包含GROUP BY子句时,不对结果进行排序,MySQL会进行排序。 GROUP_CONCAT() 支持,存在差异 GaussDB中指定DISTINCT且SQL语句包含GROUP BY子句时,不对结果进行排序,MySQL会进行排序。 GaussDB中当GROUP_CONCAT参数中同时有DISTINCT和ORDER BY语法时,所有ORDER BY后的表达式必须也在DISTINCT的表达式之中。 GaussDB中GROUP_CONCAT(... ORDER BY 数字)不代表按照第几个参数的顺序,数字只是一个常量表达式,相当于不排序。 GaussDB中使用参数group_concat_max_len限制GROUP_CONCAT最大返回长度,超长截断,目前能返回的最大长度是1073741823,小于MySQL。 MAX() 支持,存在差异 GaussDB中指定DISTINCT且SQL语句包含GROUP BY子句时,不对结果进行排序,MySQL会进行排序。当参数为非表字段时,MAX函数返回值类型和MySQL 5.7不一致。 MIN() 支持,存在差异 GaussDB中指定DISTINCT且SQL语句包含GROUP BY子句时,不对结果进行排序,MySQL会进行排序。当参数为非表字段时,MIN函数返回值类型和MySQL 5.7不一致。 SUM() 支持,存在差异 GaussDB中指定DISTINCT且SQL语句包含GROUP BY子句时,不对结果进行排序,MySQL会进行排序。 GaussDB中当expr中的列为BIT、BOOL、整数类型,且所有行的和超过BIGINT的范围时,会发生溢出导致整数翻转。 父主题: 系统函数
  • 比较函数 表1 比较函数列表 MySQL数据库 GaussDB数据库 差异 COALESCE() 支持,存在差异 union distinct场景下,返回值精度与MySQL不完全一致。 当第一个不为NULL的参数的后续参数表达式中存在隐式类型转换错误时,MySQL会忽略该错误,GaussDB会提示类型转换错误。当参数为MIN函数、MAX函数时,返回值类型与MySQL不一致。 INTERVAL() 支持 - GREATEST() 支持,存在差异 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为LONGBLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 当该函数入参含有NULL且在WHERE关键字之后调用,返回结果与MySQL 5.7不一致,此处为MySQL 5.7存在的问题,MySQL 8.0修复了该问题,目前GaussDB和MySQL 8.0保持一致。 LEAST() 支持,存在差异 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为LONGBLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 当该函数入参含有NULL且在WHERE关键字之后调用,返回结果与MySQL 5.7不一致,此处为MySQL 5.7存在的问题,MySQL 8.0修复了该问题,目前GaussDB和MySQL 8.0保持一致。 ISNULL() 支持 - 父主题: 系统函数
  • 加密函数 表1 加密函数列表 MySQL数据库 GaussDB数据库 差异 AES_DECRYPT() 支持,存在差异 ecb为不安全加密模式,GaussDB不支持,默认为cbc模式。 GaussDB中,当指定数据库使用的字符编码是SQL_ASCII时,服务器把字节值0~127根据ASCII标准解释,而字节值128~255则当作无法解析的字符;如果该函数的输入输出包含了任何非ASCII数据,数据库将无法帮助用户转换或者校验非ASCII字符。 MySQL的返回值类型为BINARY、VARBINARY、BLOB、MEDIUMBLOB、LONGBLOB,GaussDB返回值类型固定为LONGBLOB。 AES_ENCRYPT() 支持,存在差异 SHA()/SHA1() 支持 - SHA2() 支持 - 父主题: 系统函数
  • 字符串函数 表1 字符串函数列表 MySQL数据库 GaussDB数据库 差异 ASCII() 支持 - BIT_LENGTH() 支持 - CHAR_LENGTH() 支持,存在差异 GaussDB此函数如果数据库字符集是SQL_ASCII,CHAR_LENGTH()会返回字节数而非字符数。 CHARACTER_LENGTH() 支持,存在差异 GaussDB此函数如果数据库字符集是SQL_ASCII,CHARACTER_LENGTH()会返回字节数而非字符数。 CONCAT() 支持,存在差异 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为LONGBLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 CONCAT_WS() 支持,存在差异 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为LONGBLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 HEX() 支持 - LENGTH() 支持 - LPAD() 支持,存在差异 MySQL默认最大填充长度为1398101,GaussDB默认最大长度为1048576。在不同字符集下,最大填充长度会有差异,例如字符集为GBK时,GaussDB默认最大长度为2097152。 当 GaussDB使用 的字符编码是SQL_ASCII时,服务器会根据ASCII标准对字节值0~127进行解释,而字节值128~255则当作无法解析的字符。如果该函数的输入输出包含了任何非ASCII数据,数据库将无法帮助用户转换或者校验非ASCII字符,从而与MySQL的行为产生较大差异。 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为LONGBLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 REPEAT() 支持,存在差异 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为LONGBLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 REPLACE() 支持,存在差异 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为LONGBLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 RPAD() 支持,存在差异 MySQL默认最大填充长度为1398101,GaussDB默认最大长度为1048576。在不同字符集下,最大填充长度会有差异,例如字符集为GBK时,GaussDB默认最大长度为2097152。 当GaussDB使用的字符编码是SQL_ASCII时,服务器会根据ASCII标准对字节值0~127进行解释,而字节值128~255则当作无法解析的字符。如果该函数的输入输出包含了任何非ASCII数据,数据库将无法帮助用户转换或者校验非ASCII字符,从而与MySQL的行为产生较大差异。 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为LONGBLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 SPACE() 支持 - STRCMP() 支持,存在差异 当GaussDB使用的字符编码是SQL_ASCII时,服务器会根据ASCII标准对字节值0~127进行解释,而字节值128~255则当作无法解析的字符。如果该函数的输入输出包含了任何非ASCII数据,数据库将无法帮助用户转换或者校验非ASCII字符,从而与MySQL的行为产生较大差异。 FIND_IN_SET() 支持,存在差异 当GaussDB使用的字符编码是SQL_ASCII时,服务器会根据ASCII标准对字节值0~127进行解释,而字节值128~255则当作无法解析的字符。如果该函数的输入输出包含了任何非ASCII数据,数据库将无法帮助用户转换或者校验非ASCII字符,从而与MySQL的行为产生较大差异。 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为LONGBLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 LCASE() LEFT() LOWER() LTRIM() REVERSE() RIGHT() RTRIM() SUBSTR() SUBSTRING() SUBSTRING_INDEX() TRIM() UCASE() UPPER() UNHEX() 支持,存在差异 MySQL的返回值类型为BINARY、VARBINARY、BLOB、MEDIUMBLOB或LONGBLOB;GaussDB返回值类型固定为LONGBLOB。 FIELD() 支持 - FORMAT() 支持 - 父主题: 系统函数
  • 日期和时间函数 以下为GaussDB数据库M-Compatibility兼容性日期时间函数公共说明,与MySQL行为一致。 函数入参为时间类型表达式的情况: 时间类型表达式主要包括TEXT、DATETIME、DATE或TIME,但所有可以隐式转换为时间表达式的类型都可以作为入参,比如数字类型可以通过先隐式转化为TEXT,再作为时间类型表达式生效。 但是,不同函数的具体生效情况会有所不同。例如:DATEDIFF函数仅计算日期之间的差值,因此时间表达式会被解析为日期;而TIMESTAMPDIFF函数在计算时间差值时,会根据UNIT参数来决定将时间表达式解析为DATE、TIME或 DATETIME。 函数入参为无效日期的情况: 一般而言,日期时间函数支持DATE、DATETIME的范围和MySQL保持一致。DATE支持的范围为'0000-01-01'到'9999-12-31',DATETIME支持的范围为'0000-01-01 00:00:00'到'9999-12-31 23:59:59'。虽然GaussDB支持的DATE、DATETIME范围大于MySQL,但是越界仍然算无效日期。 大部分时间函数对于入参为无效时间时,会告警并返回NULL,只有能通过cast正常转换的日期,才是正常合理的日期。 GaussDB M-Compatibility兼容性框架下GaussDB的大部分日期时间函数与MySQL一致,一些函数的差异如下表所示: 表1 日期与和时间函数列表 MySQL数据库 GaussDB数据库 差异 ADDDATE() 支持 - ADDTIME() 支持 - CONVERT_TZ() 支持 - CURDATE() 支持 - CURRENT_DATE()/CURRENT_DATE 支持 - CURRENT_TIME()/CURRENT_TIME 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURRENT_TIME(257) == SELECT CURRENT_TIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 CURRENT_TIMESTAMP()/CURRENT_TIMESTAMP 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURRENT_TIMESTAMP(257) == SELECT CURRENT_TIMESTAMP(1))。 GaussDB只支持[0,6]合法值,其他值报错。 CURTIME() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURTIME(257) == SELECT CURTIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 DATE() 支持 - DATE_ADD() 支持 - DATE_FORMAT() 支持 - DATE_SUB() 支持 - DATEDIFF() 支持 - DAY() 支持 - DAYNAME() 支持 - DAYOFMONTH() 支持 - DAYOFWEEK() 支持 - DAYOFYEAR() 支持 - EXTRACT() 支持 - FROM_DAYS() 支持 - FROM_UNIXTIME() 支持 - GET_FORMAT() 支持 - HOUR() 支持 - LAST_DAY() 支持 - LOCALTIME()/LOCALTIME 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT LOCALTIME(257) == SELECT LOCALTIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 LOCALTIMESTAMP/LOCALTIMESTAMP() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT LOCALTIMESTAMP(257) == SELECT LOCALTIMESTAMP(1))。 GaussDB只支持[0,6]合法值,其他值报错。 MAKEDATE() 支持 - MAKETIME() 支持,存在差异 分布式下推场景下当TIME类型秒位无精度时,MySQL默认补齐6个0,GaussDB不做补齐。 MICROSECOND() 支持 - MINUTE() 支持 - MONTH() 支持 - MONTHNAME() 支持 - NOW() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT NOW(257)==SELECT NOW(1))。 GaussDB只支持[0,6]合法值,其他值报错。 PERIOD_ADD() 支持,存在差异 整数溢出处理的行为: MySQL在5.7版本,此函数入参和结果的最大值都为2^32=4294967296,在入参或结果的period对应的月份累加值以及month_number超过uint32范围时存在整数回绕问题;在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 负数period的表现: MySQL在5.7版本,会将负数年份解析为异常值而不是报错。GaussDB入参或结果(如100年1月减去10000月)出现负数时报错。在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 period月份越界的表现: MySQL在5.7版本中,若月份大于12或等于0,例如200013、199900,会将其顺延到之后的年份,或者将0月作为上一年12月处理。GaussDB会对越界月份进行报错。在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 PERIOD_DIFF() 支持,存在差异 整数溢出处理的行为: MySQL在5.7版本,此函数入参和结果的最大值都为2^32=4294967296,在入参或结果的period对应的月份累加值以及month_number超过uint32范围时存在整数回绕问题;在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 负数period的表现: MySQL在5.7版本,会将负数年份解析为异常值而不是报错。GaussDB入参或结果(如100年1月减去10000月)出现负数时报错。在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 period月份越界的表现: MySQL在5.7版本中,若月份大于12或等于0,例如200013、199900,会将其顺延到之后的年份,或者将0月作为上一年12月处理。GaussDB会对越界月份进行报错。在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 QUARTER() 支持 - SEC_TO_TIME() 支持 - SECOND() 支持 - STR_TO_DATE() 支持,存在差异 返回值类型与MySQL有差异,GaussDB返回的是text,MySQL返回的是datetime、date。 SUBDATE() 支持 - SUBTIME() 支持 - SYSDATE() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕。 GaussDB不回绕。 TIME() 支持 - TIME_FORMAT() 支持 - TIME_TO_SEC() 支持 - TIMEDIFF() 支持 - TIMESTAMP() 支持 - TIMESTAMPADD() 支持 - TIMESTAMPDIFF() 支持 - TO_DAYS() 支持 - TO_SECONDS() 支持 - UNIX_TIMESTAMP() 支持,存在差异 MySQL会根据入参是否存在小数位,决定返回定点型还是整型。当前GaussDB在内层嵌套操作符或函数时,返回的类型与MySQL可能存在不同。当内层节点返回定点、浮点、字符型、时间类型(不包括date类型)时,MySQL可能返回整型,GaussDB会返回定点型。 UTC_DATE() 支持 - UTC_TIME() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕,GaussDB只支持[0,6]合法值,其他值报错。 UTC_TIMESTAMP() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕,GaussDB只支持[0,6]合法值,其他值报错。 WEEK() 支持 - WEEKDAY() 支持 - WEEKOFYEAR() 支持 - YEAR() 支持 - YEARWEEK() 支持 - 父主题: 系统函数
  • 流程控制函数 表1 流程控制函数列表 MySQL数据库 GaussDB数据库 差异 IF() 支持,存在差异 当第一个参数为TRUE且第三个参数表达式中存在隐式类型转换错误,或者第一个参数为FALSE且第二个参数表达式中存在隐式类型转换错误时,MySQL会忽略该错误,GaussDB会提示类型转换错误。 IFNULL() 支持,存在差异 第一个参数不为NULL且第二个参数表达式中存在隐式类型转换错误时,MySQL会忽略该错误,GaussDB会提示类型转换错误。 NULLIF() 支持,存在差异 函数返回值类型在MySQL 5.7和MySQL 8.0中存在差异,考虑到MySQL 8.0更合理,因此函数返回值类型兼容MySQL 8.0。 父主题: 系统函数
  • 双冒号转换差异点 GaussDB中使用双冒号将函数入参转换为期望类型可能导致结果超出预期,且MySQL中无双冒号功能。 示例: m_db=# SELECT POW("12"::VARBINARY,"12"::VARBINARY); ERROR: value out of range: overflow 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)
  • UNION,CASE和相关构造差异点 POLYGON + NULL、POINT + NULL、POLYGON + POINT组合在MySQL中均返回GEOMETRY类型,GaussDB中未涉及,暂时当做报错处理。 SET和ENUM两种类型暂未支持,暂时当做报错处理。 常量类型和其他类型做类型聚合的时候,输出类型的精度为其他类型的精度。如“SELECT "helloworld" UNION SELECT p FROM t;”的结果的精度为属性p的精度。 定点常量和不带精度约束的类型(非字符串类型如int、bool、year等,聚合结果类型为定点类型)聚合时,精度约束会按照定点数默认精度31输出。 merge rule差异: MySQL 5.7中YEAR和TINYINT、INT、MEDIUMINT、BIGINT、BOOL聚合的结果类型为带UNSIGNED的类型,GaussDB的结果类型为不带UNSIGNED的类型;MySQL中BIT和INT、NUMERIC、FLOAT、DOUBLE等数值类型的聚合类型为VARBINARY类型,GaussDB中BIT和INT|NUMERIC聚合为NUMERIC类型,和FLOAT或者DOUBLE类型聚合时,结果为DOUBLE类型,和无符号整型聚合时为UINT8类型。 MySQL中BINARY和CHAR填充字符不相同,BINARY填充'\0',CHAR填充空格,GaussDB中BINARY和CHAR都是填充空格。
  • 字符串数据类型 表1 字符串数据类型 MySQL数据库 GaussDB数据库 差异 CHAR(M) 支持,存在差异 输入格式:输入二进制或十六进制字符串时,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。 VARCHAR(M) 支持,存在差异 输入格式: GaussDB的自定义函数参数和返回值不支持长度校验,存储过程参数不支持长度校验,MySQL支持。 GaussDB的自定义函数和存储过程中的临时变量支持长度校验以及严格宽松模式下的报错和截断告警,MySQL不支持。 输入二进制或十六进制字符串时,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。 TINYTEXT 支持,存在差异 输入格式: 默认值:创建表列时语法上允许设置默认值,MySQL不允许设置默认值。 输入二进制或十六进制字符串时,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。 主键:MySQL中TINYTEXT类型不支持主键,GaussDB支持。 索引:MySQL中TINYTEXT类型不支持除前缀索引外其他索引方法,GaussDB支持。 外键:MySQL中TINYTEXT类型不支持作为外键的参考列/被参考列,GaussDB支持。 TEXT 支持,存在差异 输入格式: 默认值:创建表列时语法上允许设置默认值,MySQL不允许设置默认值。 输入二进制或十六进制字符串时,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。 主键:MySQL中TEXT类型不支持主键,GaussDB支持。 索引:MySQL中TEXT类型不支持除前缀索引外其他索引方法,GaussDB支持。 外键:MySQL中TINYTEXT类型不支持作为外键的参考列/被参考列,GaussDB支持。 MEDIUMTEXT 支持,存在差异 输入格式: 默认值:创建表列时语法上允许设置默认值,MySQL不允许设置默认值。 输入二进制或十六进制字符串时,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。 主键:MySQL中MEDIUMTEXT类型不支持主键,GaussDB支持。 索引:MySQL中MEDIUMTEXT类型不支持除前缀索引外其他索引方法,GaussDB支持。 外键:MySQL中TINYTEXT类型不支持作为外键的参考列/被参考列,GaussDB支持。 LONGTEXT 支持,存在差异 输入格式: GaussDB只支持不超过1GB字节长度,MySQL支持4GB-1字节长度。 默认值:创建表列时语法上允许设置默认值,MySQL不允许设置默认值。 输入二进制或十六进制字符串时,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。 主键:MySQL中LONGTEXT类型不支持主键,GaussDB支持。 索引:MySQL中LONGTEXT类型不支持除前缀索引外其他索引方法,GaussDB支持。 外键:MySQL中TINYTEXT类型不支持作为外键的参考列/被参考列,GaussDB支持。 父主题: 数据类型
  • 日期与时间数据类型 表1 日期与时间数据类型 MySQL数据库 GaussDB数据库 差异 DATE 支持,存在差异 GaussDB支持date数据类型,与MySQL相比规格上存在如下差异: 反斜杠\在MySQL和GaussDB中都视为转义,但MySQL支持\0,GaussDB暂不支持,因此反斜杠作为分隔符且分隔符后为字符0时GaussDB会报错。 DATETIME[(fsp)] 支持,存在差异 GaussDB支持datetime数据类型,与MySQL相比规格上存在如下差异: 反斜杠\在MySQL和GaussDB中都视为转义,但MySQL支持\0,GaussDB暂不支持,因此反斜杠作为分隔符且分隔符后为字符0时GaussDB会报错。 TIMESTAMP[(fsp)] 支持,存在差异 GaussDB支持timestamp数据类型,与MySQL相比规格上存在如下差异: 反斜杠\在MySQL和GaussDB中都视为转义,但MySQL支持\0,GaussDB暂不支持,因此反斜杠作为分隔符且分隔符后为字符0时GaussDB会报错。 MySQL 5.7中timestamp列默认有default value,为数据插入时的实时时间。GaussDB与MySQL 8.0一致,均不设置默认值,即插入null时,值为null。 TIME[(fsp)] 支持,存在差异 GaussDB支持time数据类型,与MySQL相比规格上存在如下差异: 反斜杠\在MySQL和GaussDB中都视为转义,但MySQL支持\0,GaussDB暂不支持,因此反斜杠作为分隔符且分隔符后为字符0时GaussDB会报错。 当时间类型的时、分、秒、纳秒为0时,GaussDB和MySQL可能存在符号位不同的情况。 YEAR[(4)] 支持 - GaussDB不支持ODBC语法的字面量: { d 'str' } { t 'str' } { ts 'str' } GaussDB支持标准SQL字面量,且类型关键字后面可选择添加精度,MySQL不支持: DATE[(n)] 'str' TIME[(n)] 'str' TIMESTAMP[(n)] 'str' 当给DATETIME、TIME、TIMESTAMP数据类型指定的精度超过其支持的最大精度时,GaussDB会将精度截断成支持的最大精度,MySQL则会报错。 父主题: 数据类型
  • 数值数据类型 除特别说明外,MySQL兼容性M-Compatibility模式中的数据类型精度、标度、位数大小等默认不支持用浮点型数值定义,建议使用合法的整型数值定义。 表1 整数类型 MySQL数据库 GaussDB数据库 差异 BOOL 支持,存在差异 输出格式:GaussDB中SELECT TRUE/FALSE输出结果为t/f,MySQL为1/0。 MySQL:BOOL/BOOLEAN类型实际映射为TINYINT类型。 BOOLEAN 支持,存在差异 TINYINT[(M)] [UNSIGNED] [ZEROFILL] 支持,存在差异 输入格式: 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。 SMALLINT[(M)] [UNSIGNED] [ZEROFILL] 支持,存在差异 MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] 支持,存在差异 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。 其他差异请参见表格下方说明中的内容。 INT[(M)] [UNSIGNED] [ZEROFILL] 支持,存在差异 输入格式: 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。 INTEGER[(M)] [UNSIGNED] [ZEROFILL] 支持,存在差异 BIGINT[(M)] [UNSIGNED] [ZEROFILL] 支持,存在差异 表2 任意精度类型 MySQL数据库 GaussDB数据库 差异 DECIMAL[(M[,D])] [ZEROFILL] 支持,存在差异 MySQL DECIMAL用一个9*9的数组存储数值,整数部分和小数部分分开存储,超过该长度时优先截小数部分。GaussDB只会在整数位数超过81位时截断。 NUMERIC[(M[,D])] [ZEROFILL] 支持,存在差异 DEC[(M[,D])] [ZEROFILL] 支持,存在差异 FIXED[(M[,D])] [ZEROFILL] 支持,存在差异 表3 浮点类型 MySQL数据库 GaussDB数据库 差异 FLOAT[(M,D)] [ZEROFILL] 支持,存在差异 FLOAT数据类型不支持KEY键值分区策略分区表。 FLOAT(p) [ZEROFILL] 支持,存在差异 FLOAT数据类型不支持KEY键值分区策略分区表。 DOUBLE[(M,D)] [ZEROFILL] 支持,存在差异 DOUBLE数据类型不支持KEY键值分区策略分区表。 DOUBLE PRECISION[(M,D)] [ZEROFILL] 支持,存在差异 DOUBLE PRECISION数据类型不支持KEY键值分区策略分区表。 REAL[(M,D)] [ZEROFILL] 支持,存在差异 REAL数据类型不支持KEY值分区策略分区表。 父主题: 数据类型
  • Database和Schema设计 MySQL的数据对象包括DATABASE、TABLE、INDEX、VIEW、TRIGGER、PROC等,MySQL的对象层次跟GaussDB的对应关系是从上至下且一对多包含关系。如下图所示: 图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中仅要在在一个表内唯一。这个差异将作为当前约束予以保留。
  • 获取结果集中的数据 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型数据。 -
  • DDL 表1 DDL语法兼容介绍 概述 详细语法说明 差异 建表和修改表时支持创建主键、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。 支持前缀索引 CREATE INDEX 前缀长度不得超过2676,键值的实际长度受内部页面限制,若字段中含有多字节字符或者一个索引上有多个键,索引行长度可能会超限报错。 CREATE INDEX语法中,不支持以下关键字作为前缀键的字段名称:COALESCE、EXTRACT、GREATEST、LEAST、LNNVL、NULLIF、NVL、NVL2、OVERLAY、POSITION、REGEXP_LIKE、SUBSTRING、TIMESTAMPDIFF、TREAT、TRIM、XMLCONCAT、XMLELEMENT、XMLEXISTS、XMLFOREST、XMLPARSE、XMLPI、XMLROOT、XMLSERIALIZE。 主键和唯一键索引中不支持前缀键。 支持指定字符集与排序规则 ALTER SCHEMA、ALTER TABLE、 CREATE SCHEMA、CREATE TABLE - 创建分区表语法兼容 CREATE TABLE PARTITION - 建表和修改表时支持指定表级和列级comment CREATE TABLE、ALTER TABLE - 创建索引时支持指定索引级comment CREATE INDEX - 交换普通表和分区表分区的数据 ALTER TABLE PARTITION ALTER TABLE EXCHANGE PARTITION的差异点: MySQL表或分区使用tablespace时,则无法进行分区和普通表数据的交换;GaussDB表或分区使用不同的tablespace时,仍可进行分区和普通表数据的交换。 对于列默认值,MySQL不会校验默认值,因此默认值不同时也可进行分区和普通表数据的交换;GaussDB会校验默认值,如果默认值不同,则无法进行分区和普通表数据的交换。 MySQL在分区表或普通表上进行DROP列操作后,表结构仍然一致,则可进行分区和普通表数据的交换;GaussDB需要保证普通表和分区表的被删除列严格对齐才能进行分区和普通表数据的交换。 MySQL和GaussDB的哈希算法不同,所以两者在相同的hash分区存储的数据可能不一致,导致最后交换的数据也可能不一致。 MySQL的分区表不支持外键,普通表包含外键或其他表引用普通表的外键,则无法进行分区和普通表数据的交换;GaussDB的分区表支持外键,在两个表的外键约束一致时,则可进行分区和普通表数据的交换;GaussDB的分区表不带外键,普通表有其他表引用,如果分区表和普通表表一致,则可进行分区和普通表数据的交换。 支持自增列 ALTER TABLE、CREATE TABLE 目前仅支持各个DN独立自增的本地自动增长列。 自动增长列建议为索引(非全局二级索引)的第一个字段,否则建表时产生警告,含有自动增长列的表进行某些操作时会产生错误,例如:ALTERT TABLE EXCHANGE PARTITION。MySQL自动增长列必须为索引第一个字段。 AUTO_INCREMENT = value语法,value必须为小于2^127的正数。MySQL不校验value。 当自增值已经达到字段数据类型的最大值时,继续自增将产生错误。MySQL有些场景产生错误或警告,有些场景仍自增为最大值。 不支持innodb_autoinc_lock_mode系统变量,GaussDB的GUC参数auto_increment_cache=0时,批量插入自动增长列的行为与MySQL系统变量innodb_autoinc_lock_mode=1相似。 自动增长列在导入数据或者进行Batch Insert执行计划的插入操作时,对于混合0、NULL和确定值的场景,如果产生错误,后续插入自增值不一定与MySQL完全一致。提供auto_increment_cache参数,可以控制预留自增值的数量。 批量插入在不同执行计划下,自增的顺序、自增值预留数量可能与MySQL不完全相同。例如:“INSERT INTO table VALUES(...),(...),...”由于要分布到不同DN,在某些执行计划中,DN获取不到即将插入的行数。提供auto_increment_cache参数,可以控制预留自增值的数量。 并行导入或插入自动增长列触发自增时,每个并行线程预留的缓存值也只在其线程中使用,未完全使用完毕的话,也会出现表中自动增长列的值不连续的情况。并行插入产生的自增值结果无法保证与MySQL完全一致。 SERIAL数据类型为原有的自增列,与AUTO_INCREMENT自增列有差异。MySQL的SERIAL数据类型就是AUTO_INCREMENT自增列。 不允许auto_increment_offset的值大于auto_increment_increment的值,会产生错误。MySQL允许,并说明auto_increment_offset会被忽略。 在表有主键或索引的情况下,ALTER TABLE命令重写表数据的顺序与MySQL不一定相同,GaussDB按表数据存储顺序重写,MySQL会按主键或索引顺序重写,导致自增值的顺序可能不同。 ALTER TABLE命令添加或修改自增列时,第一次预留自增值的数量是表统计信息中的行数,统计信息的行数不一定与MySQL一致。 在触发器或用户自定义函数中自增时,刷新last_insert_id返回值。MySQL不刷新。 对GUC参数auto_increment_offset和auto_increment_increment设置超出范围的值会产生错误。MySQL会自动改为边界值。 暂不支持last_insert_id函数。 本地临时表暂不支持自动增长列。 sql_mode设置no_auto_value_on_zero参数,表定义的自动增长列为非NOT NULL约束,向表中插入数据不指定自动增长列的值时,GaussDB中自动增长列插入NULL值,且不触发自增;MySQL中自动增长列插入NULL值,触发自增。 支持删除表的主键约束 ALTER TABLE - 支持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不支持。 支持更改表名兼容语法 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, ...]; GaussDB的alter rename语法仅支持修改表名称功能操作,不能耦合其它功能操作。 GaussDB中,仅旧表名字段支持使用schema.table_name格式,且新表名与旧表名将属于同一个Schema。 GaussDB的不支持新旧表跨Schema重命名操作;但如有权限,则可在当前Schema下修改其它Schema下表名称。 GaussDB的rename多组表的语法支持全为本地临时表的重命名,不支持本地临时表和非本地临时表组合的场景。 支持增加子分区语法兼容 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_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_definition1, partition_definition1,…);语法添加多分区。 仅支持原有添加多分区语法:ALTER TABLE table_name ADD PARTITION (partition_definition1), ADD PARTITION (partition_definition2[y1] ), …;。 父主题: SQL
  • 排序规则 GaussDB数据库支持指定模式、表或列的排序规则,支持的范围如下。 排序规则差异说明: 当前仅有字符串类型、部分二进制类型支持指定排序规则,其他类型不支持指定排序规则,可以通过查询pg_type系统表中类型的typcollation属性不为0来判断该类型支持字符序。MySQL中所有类型可以指定字符序,但除字符串、二进制类型其他排序规则无实际意义。 当前排序规则仅支持在其对应字符集与库级字符集一致时可以指定。 utf8mb4字符集下默认字符序为utf8mb4_general_ci,与MySQL 5.7保持一致,utf8mb4_0900_ai_ci为utf8mb4的非默认字符序。 GaussDB中utf8和utf8mb4为同一个字符集。 表1 排序规则列表 MySQL数据库 GaussDB数据库 utf8mb4_general_ci 支持 utf8mb4_unicode_ci 支持 utf8mb4_bin 支持 gbk_chinese_ci 支持 gbk_bin 支持 gb18030_chinese_ci 支持 gb18030_bin 支持 binary 支持 utf8mb4_0900_ai_ci 支持 utf8_general_ci 支持 utf8_bin 支持 父主题: MySQL兼容性MYSQL模式
  • 数字操作函数 表1 数字操作函数列表 MySQL数据库 GaussDB数据库 差异 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空类型。 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空类型。 父主题: 系统函数
  • 聚合函数 表1 聚合函数列表 MySQL数据库 GaussDB数据库 差异 GROUP_CONCAT() 支持,存在差异 当group_concat参数中同时有DISTINCT和ORDER BY语法时,所有ORDER BY后的表达式必须也在DISTINCT的表达式之中。 group_concat(... order by 数字)不代表按照第几个参数的顺序,数字只是一个常量表达式,相当于不排序。 无论入参的数据类型是什么,group_concat返回值的数据类型始终为text;MySQL的group_concat在含有二进制类型参数时,返回值为二进制类型,其他情况返回值为字符串类型,并且返回值长度大于512时,其数据类型为字符串大对象或二进制大对象。 GUC参数group_concat_max_len有效范围是0-1073741823,最大值比MySQL小。 DEFAULT() 支持,存在差异 字段默认值为数组形式,GaussDB返回数组形式,MySQL不支持数组类型。 GaussDB字段是隐藏列(比如xmin、cmin),default函数返回空值。 GaussDB支持分区表、临时表、多表连接查询默认值。 GaussDB支持查询列名包含字符串值节点(表示名称)和A_Star节点(表示出现“*”),如default(tt.t4.id)和default(tt.t4.*)。不合法的查询列名和A_Star节点,GaussDB和MySQL报错信息有差异。 GaussDB创建字段默认值,没有检验字段类型的范围,使用default函数可能报错。 字段的默认值是函数表达式时,GaussDB的default函数返回建表时字段的default表达式的计算值。MySQL的default函数返回NULL。 父主题: 系统函数
  • JSON函数 JSON函数差异说明: 对于JSON函数和其他字符入参函数,如果输入中包含转义字符,默认情况下会与MySQL有一定差异。要实现与MySQL的兼容,需要设置GUC参数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数据库 差异 JSON_APPEND() 支持 - JSON_ARRAY() 支持 - JSON_ARRAY_APPEND() 支持 - JSON_ARRAY_INSERT() 支持 - JSON_CONTAINS() 支持 - JSON_CONTAINS_PATH() 支持 - JSON_DEPTH() 支持,存在差异 返回值与MySQL有差异,GaussDB返回的是int,MySQL返回的是bigint。 JSON_EXTRACT() 支持 - JSON_INSERT() 支持 - JSON_KEYS() 支持 - JSON_LENGTH() 支持,存在差异 返回值与MySQL有差异,GaussDB返回的是int,MySQL返回的是bigint。 JSON_MERGE() 支持 - JSON_OBJECT() 支持 - JSON_QUOTE() 支持,存在差异 返回值与MySQL有差异,GaussDB返回的是JSON,MySQL返回的是varchar或者text。 JSON_REMOVE() 支持 - JSON_REPLACE() 支持 - JSON_SEARCH() 支持,存在差异 返回值与MySQL有差异,GaussDB返回的是text,MySQL返回的是JSON。 JSON_SET() 支持 - JSON_TYPE() 支持,存在差异 数值类型的JSON值统一识别为number,与MySQL有差异。 JSON_UNQUOTE() 支持 - JSON_VALID() 支持 - 父主题: 系统函数
  • 字符串函数 表1 字符串函数列表 MySQL数据库 GaussDB数据库 差异 BIN() 支持,存在差异 函数入参支持类型存在差异,GaussDB入参支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned 字符和文本类型:char、varchar、tinytext、text、mediumtext、longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool CONCAT() 支持,存在差异 无论参数的数据类型如何,concat返回值的数据类型始终为text;MySQL的concat在含有二进制类型参数时,返回值为二进制类型。 CONCAT_WS() 支持,存在差异 无论参数的数据类型如何,concat_ws返回值的数据类型始终为text;MySQL的concat_ws在含有二进制类型参数时,返回值为二进制类型,其他情况返回值为字符串类型。 ELT() 支持,存在差异 函数入参1支持类型存在差异,GaussDB入参1支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned 字符和文本类型:char、varchar、tinytext、text、mediumtext、longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 函数入参2支持类型存在差异,GaussDB入参2支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned 字符和文本类型:char、varchar、tinytext、text、mediumtext、longtext 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 大对象类型:tinyblob、blob、mediumblob、longblob 日期类型:datetime、timestamp、date、time FIELD() 支持,存在差异 函数入参为在bigint最大值 ~ bigint unsigned最大值范围内的数字,存在不兼容。 函数入参为浮点型float(m, d)、double(m, d)、real(m, d)时精度更高,存在不兼容。 FIND_IN_SET() 支持,存在差异 当数据库encoding = 'SQL_ASCII'时,不支持默认的大小写判断规则,即在用户不指定字符集规则的情况下,大写与小写区分判断。 INSERT() 支持,存在差异 Int64类型传参有范围限制,一旦超出-9223372036854775808~9223372036854775807范围会直接报错,MySQL对数值类型传参范围无限制,异常会告警按照上限或下限数值处理。 字符串传参有限制,入参text类型字符串长度最大为2^30-5字节,入参bytea类型字符串长度最大为2^30-512字节。 s1和s2任意参数为bytea类型时,涉及到结果出现非法字符的情况可能展示结果与MySQL有差异但是字符编码与MySQL是一致的。 LOCATE() 支持,存在差异 入参1为bytea类型,入参2为text类型时,GaussDB与MySQL行为存在差异。 MAKE_SET() 支持,存在差异 bits参数为整型时,最大范围支持到int128,低于MySQL范围。 bits参数为日期类型datetime、timestamp、date、time,由于时间类型转整型与MySQL存在差异,目前均未做支持。 bit类型或bool类型由于此类数据类型GaussDB与MySQL存在差异,返回结果导致的差异为GaussDB与MySQL固有差异。bits入参为bool类型,str入参为bit类型与bool类型均不做支持。 bits入参为字符串或文本类型时,仅支持纯整型数字形式,其他形式存在差异。且纯整型数字范围限制在bigint范围。 str入参整型数值超过正负81个9,返回值与MySQL有差异。 str入参当以科学计数法表示时,GaussDB末尾0值会显示,MySQL不显示,以科学计数法打印,此为固有差异。 QUOTE() 支持,存在差异 已知str字符串中含有“\Z”,“\r”,“\%”,“\_”,GaussDB未进行转义,与MySQL存在差异。斜线后跟部分数字也会引起差异,如“\563”。由转义字符引起的本函数与MySQL的差异,此为GaussDB与MySQL的转义字符差异。 str字符串中的“\b”,输出结果表现形式与MySQL有差异。此为GaussDB与MySQL的固有差异 str字符串中含有“\0”时,GaussDB由于UTF-8字符集不识别该字符,输入不成功。此为GaussDB与MySQL的固有差异 str为bit或bool类型时,由于GaussDB与MySQL此类型目前有差异,暂不支持此类类型。 GaussDB最大支持1GB数据传输,str入参长度最大支持536870908字节,函数返回结果字符串最大支持1GB。 str入参整型数值超过正负81个9,返回值与MySQL有差异。 str入参当以科学计数法表示时,GaussDB末尾0值会显示,MySQL不显示,以科学计数法打印,此为固有差异。 SPACE() 支持,存在差异 GaussDB入参最大支持1073741818字节,超出返回空字符串。MySQL的入参默认最大支持4194304字节,超出告警。 函数入参支持类型存在差异,GaussDB入参支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned 字符和文本类型:char、varchar、tinytext、text、mediumtext、longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool SUBSTR() 支持 - SUBSTRING() 支持 - SUBSTRING_INDEX() 支持 - STRCMP() 支持,存在差异 函数入参支持类型存在差异,GaussDB入参支持类型如下: 字符类型:char、varchar、nvarchar2、text 二进制类型:bytea 数值类型:tinying [unsigned]、smallint [unsigned]、integer [unsigned]、bigint [unsigned]、float4、float8、numeric 日期时间类型:date、time without time zone、datetime、timestamptz 对于数值类型中的浮点类型,由于连接参数设置不同,精度可能与M有差异,不建议使用该场景,或使用NUMERIC类型代替。 SHA()/SHA1() 支持 - SHA2() 支持 - 父主题: 系统函数
  • 流量控制函数 表1 流量控制函数列表 MySQL数据库 GaussDB数据库 差异 IF() 支持,存在差异 expr1入参仅支持bool类型。非bool类型入参若不能转换为bool类型则报错。 若expr2、expr3两个入参类型不同且两类型间不存在隐式转换函数则报错。 两个入参类型相同时,返回该入参类型。 若expr2、expr3两个入参类型分别为NUMERIC、STRING或TIME其中一个,GaussDB输出为TEXT类型,MySQL输出为VARCHAR类型。 IFNULL() 支持,存在差异 若expr1、expr2两个入参类型不同且两类型间不存在隐式转换函数则报错。 两个入参类型相同时,返回该入参类型。 若expr1、expr2两个入参类型范畴分别为NUMERIC、STRING或TIME其中一个,GaussDB输出为TEXT类型,MySQL输出为VARCHAR类型。 两个入参类型中一个为FLOAT4类型,另一个为NUMERIC范畴中任一类型,返回值为DOUBLE类型。MySQL其中一入参为FLOAT4,另一入参为TINYINT、UNSIGNED TINYINT、SMALLINT、UNSIGNED SMALLINT、MEDIUMINT、UNSIGNED MEDIUMINT、BOOL任一类型时,返回FLOAT4类型,第一个入参为FLOAT4,第二个入参为BIGINT或UNSIGNED BIGINT时,返回FLOAT类型。 NULLIF() 支持,存在差异 GaussDB中NULLIF()类型推导遵从以下逻辑: 如果两个参数的数据类型不同,且两个入参类型存在等值比较操作符,则返回对应等值操作符对应的左值类型,否则会对两个入参类型进行强制类型兼容。 若强制类型兼容后,存在等值比较操作符,则返回强制类型兼容后对应等值操作符的左值类型。 若强制类型兼容后,仍找不到对应等值操作符,则报错。 --两个入参类型存在等值比较操作符 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输出类型仅与第一个入参类型有关: 第一个入参为tinyint、smallint、mediumint、int、bool时,输出为int类型。 第一个入参为bigint时,输出为bigint类型。 第一个入参为unsigned tinyint、unsigned smallint、unsigned mediumint、unsigned int、bit时,输出为unsigned int类型。 第一个入参为unsigned bigint时,输出为unsigned bigint。 第一个入参为浮点型即float、double、real时,输出为double类型。 第一个入参类型为decimal或numeric类型时,输出为decimal类型。 第一个入参类型为时间类型或字符串类型即date、time、date、datetime、timestamp、char、varchar以及tinytext、enum、set时,输出为varchar类型。 第一个入参类型为text、mediumtext、longtext时,输出为longtext类型。 第一个入参类型为tinyblob时,输出为varbinary类型。 第一个入参类型为mediumblob或longblob时,输出为longblob类型。 第一个入参为blob时,输出为blob类型。 ISNULL() 支持,存在差异 GaussDB中返回值为BOOLEAN类型的t或f,MySQL中返回值为INT类型的1或0。 父主题: 系统函数
  • 二进制数据类型 表1 二进制数据类型 MySQL数据库 GaussDB数据库 差异 BINARY[(M)] 不支持 - VARBINARY(M) 不支持 - TINYBLOB 支持,存在差异 取值范围:GaussDB中该类型由BYTEA类型映射得来,长度不能超过1GB,超过长度限制后会报错。MySQL中该类型不能超过255字节,超过长度限制后,在严格模式下会报错,在宽松模式下会对数据进行截断并告警。 输入格式:不支持转义字符输入,不支持""双引号输入。 输出格式:对于'\0'字符,查询结果表现为“\000”,使用JDBC驱动的getBytes接口获取表现为'\0'字符。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 BLOB 支持,存在差异 取值范围:GaussDB中该类型由BYTEA类型映射得来,长度不能超过1GB,超过长度限制后会报错。MySQL中该类型不能超过65535字节,超过长度限制后,在严格模式下会报错,在宽松模式下会对数据进行截断并告警。 输入格式:不支持转义字符输入,不支持""双引号输入。 输出格式:对于'\0'字符,查询结果表现为“\000”,使用JDBC驱动的getBytes接口获取表现为'\0'字符。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 MEDIUMBLOB 支持,存在差异 取值范围:GaussDB中该类型由BYTEA类型映射得来,长度不能超过1GB,超过长度限制后会报错。MySQL中该类型不能超过16777215字节,超过长度限制后,在严格模式下会报错,在宽松模式下会对数据进行截断并告警。 输入格式:不支持转义字符输入,不支持""双引号输入。 输出格式:对于'\0'字符,查询结果表现为“\000”,使用JDBC驱动的getBytes接口获取表现为'\0'字符。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 LONGBLOB 支持,存在差异 取值范围:GaussDB中该类型由BYTEA类型映射得来,只支持不超过1GB的长度,具体范围参照BYTEA数据类型集中式和分布式规格。 输入格式:不支持转义字符输入,不支持""双引号输入。 输出格式:对于'\0'字符,查询结果表现为“\000”,使用JDBC驱动的getBytes接口获取表现为'\0'字符。 操作符:不支持算数运算符“+”、“-”、“*”、“/”、“%”;不支持常用逻辑运算符或、与、非(“||”、“&&”、“!”);不支持常用位运算符“~”、“&”、“|”、“^”。 BIT[(M)] 不支持 - 父主题: 数据类型
  • 字符串数据类型 表1 字符串数据类型 MySQL数据库 GaussDB数据库 差异 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表示按位异或。 VARCHAR(M) 支持,存在差异 输入格式 GaussDB的自定义函数参数和返回值不支持长度校验,存储过程参数不支持长度校验,MySQL支持。 GaussDB的自定义函数和存储过程中的临时变量支持长度校验以及严格宽松模式下的报错和截断告警,MySQL不支持。 GaussDB不支持转义字符输入,不支持""双引号输入,MySQL支持。 操作符 GaussDB能正常转成浮点型的字符串与整型值进行加、减、乘、除、求余计算,返回值是整型值,MySQL是返回浮点型。 GaussDB除以0会报错,MySQL返回null。 “~”:GaussDB返回负数,MySQL返回8字节无符号整数。 “^”:GaussDB表示次方幂,MySQL表示按位异或。 TINYTEXT 支持,存在差异 输入格式 GaussDB中该类型的长度不能超过1GB,超过长度限制后会报错。MySQL中该类型不能超过255字节,超过长度限制后,在严格模式下会报错,在宽松模式下会对数据进行截断并告警。 GaussDB不支持转义字符输入,不支持""双引号输入,MySQL支持。 操作符 GaussDB能正常转成浮点型的字符串与整型值进行加、减、乘、除、求余计算,返回值是整型值,MySQL是返回浮点型。 GaussDB除以0会报错,MySQL返回null。 “~”:GaussDB返回负数,MySQL返回8字节无符号整数。 “^”:GaussDB表示次方幂,MySQL表示按位异或。 TEXT 支持,存在差异 输入格式 GaussDB中该类型的长度不能超过1GB,超过长度限制后会报错。MySQL中该类型不能超过65535字节,超过长度限制后,在严格模式下会报错,在宽松模式下会对数据进行截断并告警。 GaussDB不支持转义字符输入,不支持""双引号输入,MySQL支持。 操作符 GaussDB能正常转成浮点型的字符串与整型值进行加、减、乘、除、求余计算,返回值是整型值,MySQL是返回浮点型。 GaussDB除以0会报错,MySQL返回null。 “~”:GaussDB返回负数,MySQL返回8字节无符号整数。 “^”:GaussDB表示次方幂,MySQL表示按位异或。 MEDIUMTEXT 支持,存在差异 输入格式 GaussDB中该类型的长度不能超过1GB,超过长度限制后会报错。MySQL中该类型不能超过16777215字节,超过长度限制后,在严格模式下会报错,在宽松模式下会对数据进行截断并告警。 GaussDB不支持转义字符输入,不支持""双引号输入,MySQL支持。 操作符 GaussDB能正常转成浮点型的字符串与整型值进行加、减、乘、除、求余计算,返回值是整型值,MySQL是返回浮点型。 GaussDB除以0会报错,MySQL返回null。 “~”:GaussDB返回负数,MySQL返回8字节无符号整数。 “^”:GaussDB表示次方幂,MySQL表示按位异或。 LONGTEXT 支持,存在差异 输入格式 GaussDB只支持不超过1GB的长度,MySQL支持4GB-1字节的长度。 GaussDB不支持转义字符输入,不支持""双引号输入,MySQL支持。 操作符 GaussDB能正常转成浮点型的字符串与整型值进行加、减、乘、除、求余计算,返回值是整型值,MySQL是返回浮点型。 GaussDB除以0会报错,MySQL返回null。 “~”:GaussDB返回负数,MySQL返回8字节无符号整数。 “^”:GaussDB表示次方幂,MySQL表示按位异或。 ENUM('value1','value2',...) 不支持 - SET('value1','value2',...) 不支持 - 父主题: 数据类型
  • 任意精度类型 表2 任意精度类型 MySQL数据库 GaussDB数据库 差异 DECIMAL[(M[,D])] 支持,存在差异 操作符:GaussDB中“^”表示指数运算,如需使用异或运算符,使用“#”替换;MySQL中“^”表示异或。 取值范围:精度M,标度D不支持浮点型数值输入,只支持整型数值输入。 输入格式:当字符串入参全部被截断时不会报错,如“@123”;只有被部分截断时才会报错,如“12@3”。 NUMERIC[(M[,D])] 支持,存在差异 DEC[(M[,D])] 支持,存在差异 FIXED[(M[,D])] 不支持 -
  • 浮点类型 表3 浮点类型 MySQL数据库 GaussDB数据库 差异 FLOAT[(M,D)] 支持,存在差异 分区表支持:FLOAT数据类型不支持KEY键值分区策略分区表。 操作符:GaussDB中“^”表示指数运算,如需使用异或运算符,使用“#”替换;MySQL中“^”表示异或。 取值范围:精度M,标度D不支持浮点型数值输入,只支持整型数值输入。 输出格式:对于非法入参一律报错ERROR,不会在sql_mode=''的宽松模式下报WARNING。 FLOAT(p) 支持,存在差异 分区表支持:FLOAT数据类型不支持KEY键值分区策略分区表。 操作符:数值类型使用^操作符,与MySQL不一致,GaussDB中^操作符为取指数运算。 取值范围:定义精度p时,仅支持使用合法的整型数据类型。 输出格式:对于非法入参一律报错ERROR,不会在sql_mode=''的宽松模式下报WARNING。 DOUBLE[(M,D)] 支持,存在差异 分区表支持:DOUBLE数据类型不支持KEY键值分区策略分区表。 操作符:GaussDB中“^”表示指数运算,如需使用异或运算符,使用“#”替换;MySQL中“^”表示异或。 取值范围:精度M,标度D不支持浮点型数值输入,只支持整型数值输入。 输出格式:对于非法入参一律报错ERROR,不会在sql_mode=''的宽松模式下报WARNING。 DOUBLE PRECISION[(M,D)] 支持,存在差异 操作符:GaussDB中“^”表示指数运算,如需使用异或运算符,使用“#”替换;MySQL中“^”表示异或。 取值范围:精度M,标度D不支持浮点型数值输入,只支持整型数值输入。 输出格式:对于非法入参一律报错ERROR,不会在sql_mode=''的宽松模式下报WARNING。 REAL[(M,D)] 支持,存在差异 分区表支持:REAL数据类型不支持KEY值分区策略分区表。 操作符:GaussDB中“^”表示指数运算,如需使用异或运算符,使用“#”替换;MySQL中“^”表示异或。 取值范围:精度M,标度D不支持浮点型数值输入,只支持整型数值输入。 输出格式:对于非法入参一律报错ERROR,不会在sql_mode=''的宽松模式下报WARNING。
  • 整数类型 除特别说明外,MySQL兼容性MYSQL模式中的数据类型精度、标度、位数大小等默认不支持用浮点型数值定义,建议使用合法的整型数值定义。 整数类型公共差异说明: 输入格式: MySQL 对于类似“asbd”、“12dd”、“12 12”等字符场景的输入,会采取截断或返回0值并上报WARNING处理,在严格模式时插表会失败。 GaussDB 整数类型(TINYINT、SMALLINT、MEDIUMINT、INT、INTEGER、BIGINT)的输入,当非法字符串部分被截断时,如“12@3”,会直接截断并无提示信息,插表成功。 当整数类型全部被截断(如“@123”)或字符串为空时,返回0,且插表成功。 操作符: +、-、*操作符 GaussDB:INT/INTEGER/SMALLINT/BIGINT在进行运算时,返回值为类型本身,不会向上提升类型,当返回值超范围时报错。 MySQL:支持提升类型到BIGINT后计算。 |、&、^、~运算符 GaussDB:在类型所占用BIT位中计算;GaussDB中^表示指数运算,如需使用异或运算符,使用#替换。 MySQL:提升类型计算。 负数显示类型转换: GaussDB:宽松模式结果为0,严格模式报错。 MySQL:依据其对应的二进制将最高位替换成数值位计算结果,例如(-1)::uint4 = 4294967295。 其他差异: INT[(M)]精度,MySQL控制格式化输出,GaussDB仅语法支持,不支持功能。 聚集函数: variance:GaussDB表示样本方差,MySQL表示总体方差。 stddev:GaussDB表示样本标准差,MySQL表示总体标准差。 显示宽度: 在为整型数字列指明宽度信息时,如果不同时指定ZEROFILL,则宽度信息在表结构描述中不显示。 INSERT语句插入字符类型字段,GaussDB统一补齐0后插入。 JOIN USING语句,涉及类型推导,MySQL默认第一张表列,GaussDB若结果为有符号类型则宽度信息失效,否则为第一张表字段宽度。 greatest/least、ifnull/if、case when/decode,MySQL不补齐0,GaussDB在类型及宽度信息一致时补齐0。 作为函数/存储过程出入参、返回值时,MySQL支持功能、GaussDB语法不报错功能不支持。 GaussDB数据库和MySQL数据库整数类型具体差异请参见表1。 表1 整数类型 MySQL数据库 GaussDB数据库 差异 BOOL 支持,存在差异 MySQL:BOOL/BOOLEAN类型实际映射为TINYINT类型。 GaussDB:支持BOOL,其中: “真”值的有效文本值是:TRUE、't'、'true'、'y'、'yes'、'1' 、'TRUE'、true、'on'以及所有非0数值。 “假”值的有效文本值是:FALSE、'f'、'false'、'n'、'no'、'0'、0、'FALSE'、false、'off'。 使用TRUE和FALSE是比较规范的用法(也是SQL兼容的用法)。 BOOLEAN 支持,存在差异 TINYINT[(M)] [UNSIGNED] 支持,存在差异 详情请参见整数类型公共差异说明。 SMALLINT[(M)] [UNSIGNED] 支持,存在差异 详情请参见整数类型公共差异说明。 MEDIUMINT[(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。 其他差异请参见整数类型公共差异说明。 INT[(M)] [UNSIGNED] 支持,存在差异 详情请参见整数类型公共差异说明。 INTEGER[(M)] [UNSIGNED] 支持,存在差异 详情请参见整数类型公共差异说明。 BIGINT[(M)] [UNSIGNED] 支持,存在差异 详情请参见整数类型公共差异说明。
  • 原型 SQLRETURN SQLDescribeParam( SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT *DataTypePtr, SQLULEN *ParameterSizePtr, SQLSMALLINT *DecimalDigitsPtr, SQLSMALLINT *NullablePtr); 表1 SQLDescribeParam参数说明 参数名 参数说明 差异 StatementHandle 语句句柄。 - ParameterNumber 参数序号,起始为1,依次递增。 - DataTypePtr 指向返回参数数据类型的指针。 MySQL ODBC对于任意类型均返回SQL_VARCHAR。 GaussDB ODBC的会根据内核返回的不同类型判断返回给应用相应的DataType类型。 ParameterSizePtr 指向返回参数大小的指针。 MySQL ODBC若允许ODBC驱动程序使用更大的数据包进行数据传输,则返回24M,否则返回255。 GaussDB ODBC根据实际类型返回参数大小。 DecimalDigitsPtr 指向返回参数十进制位数的指针。 - NullablePtr 指向返回参数是否允许NULL值的指针。 MySQL ODBC直接返回SQL_NULLABLE_UNKNOWN。 GaussDB ODBC直接返回SQL_NULLABLE。
  • 驱动 GaussDB中,驱动PBE接口通过文本模式传参时,如果兼容性参数m_format_behavior_compat_options中不包含disable_zero_chars_conversion选项,服务端会将参数中的“\0”字符替换成空格,与MySQL行为存在差异。如果兼容性参数m_format_behavior_compat_options中包含disable_zero_chars_conversion选项,则禁止将“\0”字符转换成空格,与MySQL行为一致。 ODBC 父主题: MySQL兼容性M-Compatibility模式
  • 其他语句 表1 其他语法兼容介绍 概述 详细语法说明 差异 锁机制 锁机制 GaussDB数据库锁机制只能在事务块中使用,MySQL无限制。 MySQL获取read锁后,当前会话无法进行写操作,GaussDB数据库获取read锁后,当前会话可以进行写操作。 MySQL给表上锁后,读取其他表报错,GaussDB数据库无限制。 MySQL同一会话中获取同一个表的锁,会自动释放上一个锁,并提交事务,GaussDB数据库无该机制。 GaussDB数据库中LOCK TABLE只能在一个事务块的内部有用,且无UNLOCK TABLE命令,锁总是在事务结束时释放。 PBE PBE 重复创建同名的PREPARE语句,GaussDB数据库会报已经存在的错误,需要先删除已有statement,MySQL会覆盖旧的statement。 GaussDB数据库和MySQL在SQL语句执行过程中对异常场景的报错阶段不同,例如解析层、执行层等;而PREPARE语句对预备语句只处理到解析层。因此PBE下对于异常场景,报错位置在PREPARE阶段还是EXECUTE阶段,GaussDB数据库和MySQL存在可能差异。 单行注释语法 单行注释语法 单行注释语法仅在设置参数m_format_behavior_compat_options包含'forbid_none_space_comment'项后注释行为与MySQL一致。 父主题: SQL
  • 标识符 GaussDB中的标识符存在以下差异: GaussDB无引号标识符中不支持以美元符号($)开头,MySQL无引号标识符中支持。 GaussDB无引号标识符中的支持大小写敏感的数据库对象。 GaussDB标识符支持U+0080~U+00FF扩展字符,MySQL标识符支持U+0080~U+FFFF的扩展字符。 无引号标识符中,GaussDB不支持创建以数字开头包含一个e或E结尾作为标识符的表,例如: -- 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支持 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_MODE包含ANSI_QUOTES)或反引号时区分大小写,MySQL不区分。 MySQL标识符长度限制为64字符,而GaussDB标识符长度限制为63字节。超过标识符的长度限制后,MySql报错,GaussDB会对标识符截断并告警。 GaussDB不支持可执行注释。 父主题: SQL
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全