String Functions概要
String functionsは、文字列データを処理および操作するために使用される組み込み関数です。これらの関数は、連結、分割、置換、検索など、様々な文字列操作を実行するのに役立ちます。
UTF-8エンコーディングサポート
UTF-8エンコーディングは、キリル文字、ギリシャ文字、漢字、絵文字など、世界中のほぼすべての文字を表現できる可変長文字エンコーディングです。
Dorisのstring functionsでは、特に明記されていない限り、UTF-8エンコーディングがサポートされています。
例えば、substring関数はUTF-8でエンコードされた文字列を正しく処理できます:
ASCII文字
mysql> SELECT substring('abc1', 2);
+----------------------+
| substring('abc1', 2) |
+----------------------+
| bc1 |
+----------------------+
ギリシャ文字
mysql> SELECT substring('αλφαβητον', 2, 4);
+---------------------------------------+
| substring('αλφαβητον', 2, 4) |
+---------------------------------------+
| λφαβ |
+---------------------------------------+
1 row in set (0.01 sec)
中国語文字
mysql> SELECT substring('你好,世界', 2, 2);
+------------------------------------+
| substring('你好,世界', 2, 2) |
+------------------------------------+
| 好, |
+------------------------------------+
Emojis
mysql> SELECT substring('😊😊a😊 World!', 2, 3);
+-----------------------------------------+
| substring('😊😊a😊 World!', 2, 3) |
+-----------------------------------------+
| 😊a😊 |
+-----------------------------------------+
パフォーマンスに関する考慮事項
UTF-8エンコードされた文字は可変長であるため、パフォーマンスに影響を与える可能性があります。一部の関数では、選択できるようにASCII版とUTF-8版の両方が提供されています。
例:
length関数は文字列のバイト長を返しますchar_length関数は文字列の文字数を返します
mysql> select length('你好');
+------------------+
| length('你好') |
+------------------+
| 6 |
+------------------+
mysql> select length('αλφαβητον');
+------------------------------+
| length('αλφαβητον') |
+------------------------------+
| 18 |
+------------------------------+
mysql> select char_length('你好');
+-----------------------+
| char_length('你好') |
+-----------------------+
| 2 |
+-----------------------+
mysql> select char_length('αλφαβητον');
+-----------------------------------+
| char_length('αλφαβητον') |
+-----------------------------------+
| 9 |
+-----------------------------------+
特別な注意事項
UTF-8エンコーディングをサポートしていない一部の文字列関数については、ドキュメントで特別に言及されます。例えば、NGRAM_SEARCH関数はASCIIエンコードされた文字列のみをサポートします。
mysql> select ngram_search('abcab' , 'ab' , 2);
+----------------------------------+
| ngram_search('abcab' , 'ab' , 2) |
+----------------------------------+
| 0.5 |
+----------------------------------+
非ASCII文字の場合、NGRAM_SEARCHは実行されますが、結果が期待通りにならない可能性があります。
mysql> select ngram_search('αβγαβ' , 'αβ' , 2);
+-----------------------------------------+
| ngram_search('αβγαβ' , 'αβ' , 2) |
+-----------------------------------------+
| 0.6666666666666666 |
+-----------------------------------------+