Перейти к содержимому
Последнее обновление

Обзор строковых функций

Строковые функции представляют собой встроенные функции для обработки строковых данных и выполнения операций с ними. Они позволяют выполнять различные операции со строками, такие как объединение, разбиение, замена, поиск и т. д.

Поддержка кодировки UTF-8​

UTF-8 представляет собой кодировку символов переменной длины, которая позволяет представить почти все используемые в мире символы, включая кириллицу, греческие буквы, китайские иероглифы, эмодзи и многое другое.

Строковые функции Doris поддерживают кодировку 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) |
+------------------------------------+
| 好, |
+------------------------------------+

Эмодзи​

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 |
+-----------------------------------------+