系统函数兼容性概述
GaussDB数据库兼容绝大多数MySQL的系统函数,但存在部分差异。建议使用M-Compatibility兼容模式下支持的系统函数,避免使用原GaussDB的系统函数。
当前存在原GaussDB的系统函数和MySQL系统函数同名,但是M-Compatibility兼容模式下尚未支持这些函数的情况;表1中的函数会提示用户在M-Compatibility兼容模式下不支持,表2中的函数仍然保持原GaussDB系统函数的行为。同名函数会与MySQL的行为产生较大差异,因此建议用户尽量避免使用这些同名函数,只使用M-Compatibility兼容模式下支持的系统函数。
isEmpty |
variance |
overlaps |
point |
stddev_pop |
stddev_samp |
var_pop |
var_samp |
- |
- |
ceil |
decode |
encode |
format |
instr |
position |
round |
stddev |
row_number |
regexp_instr |
regexp_like |
regexp_replace |
regexp_substr |
- |
- |
在参数m_format_dev_version值为s2或以上版本并且参数m_format_behavior_compat_options值包含enable_conflict_funcs的情况下,下表中同名函数的行为会修改为M-Compatibility兼容模式下的函数行为。
ceil |
format |
instr |
position |
row_number |

- 函数regexp_instr、regexp_like、regexp_replace、regexp_substr在参数m_format_dev_version值为's2'或以上版本并且参数m_format_behavior_compat_options值包含'enable_conflict_funcs'的情况下使用会报错,并提示M-Compatibility兼容模式数据库不支持;其他行为和《开发指南》中的“SQL参考 > 函数和操作符 > 字符处理函数和操作符”章节中的同名函数保持一致。
- M-Compatibility模式下,系统函数存在以下公共差异:
- 系统函数的返回值类型仅考虑入参node类型为Var(表中数据)和Const(常量输入)类型时的情况与MySQL保持一致,其他情况(如入参为运算表达式、函数表达式等)可能返回值的类型与MySQL有差异。
- 系统函数在涉及LIMIT与OFFSET同时使用的查表场景下,由于GaussDB和MySQL的执行层机制不同,GaussDB会逐行调用函数,此行为会导致在存在报错的情况下会直接报错且中断执行,但MySQL不会逐行执行故不会报错中断,从而造成返回结果存在不一致。
- 系统函数的调用不推荐使用pg_catalog.func_name()形式的调用,当被调用函数存在语法形式的入参时(如SELECT pg_catalog.substr('demo' FROM 1 FOR 2)),函数的调用可能存在错误。