文字列関数
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""m"および"s""i""i"、MySQL の値オプション"m""c""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 は
"u"をサポートしていません。これは、MySQL での Unix のみの行末を意味します。
データ型の互換性
バイナリ文字列型に対する TiDB と MySQL のサポートの違い:
- MySQL は、8.0.22 以降、正規表現関数でバイナリ文字列をサポートしていません。詳細については、 MySQL ドキュメントを参照してください。しかし実際には、すべてのパラメータまたは戻り値の型がバイナリ文字列の場合、通常の関数はMySQL で機能します。そうしないと、エラーが報告されます。
- 現在、TiDB はバイナリ文字列の使用を禁止しており、どのような状況でもエラーが報告されます。
その他の互換性
空の文字列の置換における TiDB と MySQL のサポートの違い:
以下は、例としてREGEXP_REPLACE("", "^$", "123")を使用します。
- MySQL は空の文字列を置き換えず、結果として
""を返します。 - TiDB は空の文字列を置き換え、結果として
"123"を返します。