字符串函数
TiDB 支持使用大部分 MySQL 5.7 中提供的字符串函数、一部分 MySQL 8.0 中提供的字符串函数和一部分 Oracle 21 所提供的函数。
关于 Oracle 函数和 TiDB 函数的对照关系,请参考 Oracle 与 TiDB 函数和语法差异对照。
支持的函数
不支持的函数
LOAD_FILE()MATCH()SOUNDEX()
正则函数与 MySQL 的兼容性
本节介绍 TiDB 中正则函数 REGEXP_INSTR()、REGEXP_LIKE()、REGEXP_REPLACE()、REGEXP_SUBSTR() 与 MySQL 的兼容情况。
语法兼容性
MySQL 的实现使用的是 ICU (International Components for Unicode) 库,TiDB 的实现使用的是 RE2 库,两个库之间的语法差异可以查阅 ICU 文档和 RE2 文档。
匹配模式 match_type 兼容性
TiDB 与 MySQL 在 match_type 上的差异:
TiDB 中
match_type可选值为:"c"、"i"、"m"、"s"。MySQL 中match_type可选值为:"c"、"i"、"m"、"n"、"u"。TiDB 中
"s"对应 MySQL 中的"n",即.字符匹配行结束符。例如:MySQL 中
SELECT REGEXP_LIKE(a, b, "n") FROM t1;在 TiDB 中需要修改为SELECT REGEXP_LIKE(a, b, "s") FROM t1;。TiDB 不支持
match_type为"u"。
数据类型兼容性
TiDB 与 MySQL 在二进制字符串 (binary string) 数据类型上的差异:
- MySQL 8.0.22 及以上版本中正则函数不支持二进制字符串,具体信息可查看 MySQL 文档。但在实际使用过程中,如果所有参数或者返回值的数据类型都是二进制字符串,则正则函数可以正常使用,否则报错。
- TiDB 目前完全禁止使用二进制字符串,无论什么情况都会报错。
其它兼容性
TiDB 与 MySQL 在替换空字符串上存在差异,下面以
REGEXP_REPLACE("", "^$", "123")为例:- MySQL 不会对空串进行替换,其结果为
""。 - TiDB 会对空串进行替换,其结果为
"123"。
- MySQL 不会对空串进行替换,其结果为
TiDB 与 MySQL 在捕获组的关键字上存在差异。MySQL 的捕获组关键字为
$,而 TiDB 的捕获组关键字为\\。此外,TiDB 只支持编号为0到9的捕获组。例如,以下 SQL 语句在 TiDB 中的返回结果为
ab。SELECT REGEXP_REPLACE('abcd','(.*)(.{2})$','\\1') AS s;