更新时间:2024-12-06 GMT+08:00

其他函数

表1 其他函数列表

MySQL数据库

GaussDB数据库

差异

DATABASE()

支持

-

UUID()

支持

-

UUID_SHORT()

支持

-

ANY_VALUE()

支持,存在差异

  • 作为分组的第一条数据是不确定的,与底层算子相关。例如同一条sql语句,GaussDB返回5和4,MySQL返回5和2。
    CREATE TABLE t1(a INT, b INT);
    INSERT INTO t1 VALUES(1, 5);
    INSERT INTO t1 VALUES(2, 4);
    INSERT INTO t1 VALUES(2, 2);
    CREATE TABLE t2(a INT, b INT);
    INSERT INTO t2 VALUES(2, 7);
    INSERT INTO t2 VALUES(3, 9);
    m_db=# SELECT ANY_VALUE(t1.b) FROM t1 LEFT JOIN t2 ON t1.a=t1.b GROUP BY t1.a;
     any_value
    -----------
             5
             4
    (2 rows)
    mysql> SELECT ANY_VALUE(t1.b) FROM t1 LEFT JOIN t2 ON t1.a=t1.b GROUP BY t1.a;
    +-----------------+
    | ANY_VALUE(t1.b) |
    +-----------------+
    |               5 |
    |               2 |
    +-----------------+
    2 rows in set (0.04 sec)
    DROP TABLE t1;
    DROP TABLE t2;
  • 与DISTINCT关键字一起使用的情况下,ORDER BY中排序的列没有包括在SELECT语句所检索的结果集的列中时,GaussDB目前不支持使用ANY_VALUE函数避免报错。
    CREATE TABLE t1(a INT, b INT);
    INSERT INTO t1 VALUES(1, 2);
    INSERT INTO t1 VALUES(1, 3);
    m_db=# SELECT DISTINCT a FROM t1 ORDER BY ANY_VALUE(b);
    ERROR:  For SELECT DISTINCT, ORDER BY expressions must appear in select list.
    LINE 1: SELECT DISTINCT a FROM t1 ORDER BY ANY_VALUE(b);
                                               ^
    mysql> SELECT DISTINCT a FROM t1 ORDER BY ANY_VALUE(b);
    +------+
    | a    |
    +------+
    |    1 |
    +------+
    1 row in set (0.00 sec)
    DROP TABLE t1;
  • ANY_VALUE函数入参为NULL、字符串类型时,返回值类型与MySQL存在差异。例如:
    • 入参为NULL时,GaussDB返回值类型为BIGINT,MySQL返回值类型为binary。
    • 入参为VARCHAR类型时,GaussDB返回值类型为VARCHAR类型,MySQL返回值类型可能是VARCHAR类型,也可能是TEXT类型。

SLEEP()

支持,存在差异

  • 调用SLEEP函数的过程中,若使用Ctrl+C提前结束调用,GaussDB只显示Cancel request sent信息,与MySQL显示不一致。
  • 除上述情况外,当SLEEP函数在其他SQL语句中被调用时,使用Ctrl+C提前结束语句,若操作恰好被SLEEP函数内部获取,则不会报错,若被系统中其他函数获取则报错,与MySQL表现不一致。
  • 若在SLEEP函数执行的过程中,其所在的进程被相关命令结束(如:SELECT PG_TERMINATE_BACKEN(xxx);),GaussDB目前行为为报错处理,与MySQL不一致。

COLLATION()

支持,存在差异

GaussDB仅支持utf8、utf8mb4、gbk、gb18030和latin1字符集下的字符序。

FOUND_ROWS()

支持

-

ROW_COUNT()

支持,存在差异

  • GaussDB没有SIGNAL语句,MySQL支持SIGNAL语句。
  • GaussDB中,因为不存在连接参数CLIENT_FOUND_ROWS(设置之后返回匹配行数而不是影响行数),不受此参数的影响,统一返回影响行数,MySQL受此参数影响。
  • GaussDB中INSERT ON DUPLICATE KEY UPDATE中触发冲突的场景,如果冲突一条返回1,MySQL返回2

SYSTEM_USER()

支持,存在差异

MySQL的配置文件中配置skip-name-resolve时,不会将127.0.0.1或::1解析为localhost,GaussDB没有相关参数,始终将127.0.0.1和::1解析为localhost。

DEFAULT()

支持,存在差异

GaussDB支持使用列别名,MySQL不支持。

BENCHMARK()

支持,存在差异

  • 因为MySQL和GaussDB执行层框架存在差异,所以MySQL和GaussDB使该函数评估同一个表达式的执行时间不具有可比性。该函数仅用于评估GaussDB不同表达式的执行效率对比。
  • 执行时间较长时,当在客户端输入Ctrl+C时,MySQL返回0后结束任务,GaussDB统一显示Cancel request sent后结束任务。