文字列関数
TiDB は、 MySQL 5.7で利用可能な文字列関数のほとんど、MySQL 8.0 で利用可能な文字列関数の一部、Oracle 21 で利用可能な関数の一部をサポートしています。
Oracle と TiDB の関数と構文の比較については、 Oracle と TiDB の機能と構文の比較参照してください。
サポートされている関数
サポートされていない関数
LOAD_FILE()MATCH()SOUNDEX()
MySQL との正規表現の互換性
次のセクションでは、 REGEXP_INSTR() 、 REGEXP_LIKE() 、 REGEXP_REPLACE() 、 REGEXP_SUBSTR()を含む、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 とは異なります。1
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;