文字列関数
TiDB は、 MySQL 5.7で使用可能な文字列関数のほとんど、MySQL 8.0 で使用可能な文字列関数の一部、Oracle 21 で使用可能な関数の一部をサポートします。
Oracle と TiDB の関数と構文の比較については、 OracleとTiDBの機能と構文の比較を参照してください。
サポートされている関数
サポートされていない関数
LOAD_FILE()MATCH()SOUNDEX()
MySQL との正規表現の互換性
次のセクションでは、MySQL との正規表現の互換性について説明します。
構文の互換性
MySQL は International Components for Unicode (ICU) を使用して正規表現を実装し、TiDB は RE2 を使用します。 2 つのライブラリの構文の違いについては、 ICUの文書とRE2 の構文を参照してください。
match_type互換性
TiDB と MySQL の間のmatch_typeの値オプションは次のとおりです。
TiDB の値のオプションは
"c"、"i"、"m"、および"s"であり、MySQL の値のオプションは"c"、"i"、"m"、"n"、および"u"です。TiDB の
"s"MySQL の"n"に対応します。 TiDB で"s"が設定されている場合、.文字は行終了文字 (\n) にも一致します。たとえば、MySQL の
SELECT REGEXP_LIKE(a, b, "n") FROM t1TiDB のSELECT REGEXP_LIKE(a, b, "s") FROM t1と同じです。TiDB は、MySQL での Unix 専用の行末を意味する
"u"サポートしていません。
データ型の互換性
TiDB と MySQL のバイナリ文字列タイプのサポートの違いは次のとおりです。
- MySQL は 8.0.22 以降、正規表現関数でバイナリ文字列をサポートしません。詳細については、 MySQL ドキュメントを参照してください。ただし、実際には、すべてのパラメータまたは戻り値の型がバイナリ文字列の場合、通常の関数はMySQL で動作します。それ以外の場合は、エラーが報告されます。
- 現在、TiDB ではバイナリ文字列の使用が禁止されており、いかなる状況でもエラーが報告されます。
その他の互換性
空の文字列の置換における TiDB サポートと MySQL サポートの違い:
以下ではREGEXP_REPLACE("", "^$", "123")を例にします。
- MySQL は空の文字列を置換せず、結果として
""を返します。 - TiDB は空の文字列を置き換え、結果として
"123"を返します。