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

UNICODE_NORMALIZE

Описание​

Выполняет нормализацию Unicode для входной строки.

Нормализация Unicode — это процесс приведения эквивалентных последовательностей символов Unicode к единой форме. Например, символ "é" можно представить одной кодовой точкой (U+00E9) или сочетанием "e" и комбинируемого знака острого ударения (U+0065 + U+0301). Нормализация обеспечивает единообразную обработку этих эквивалентных представлений.

Синтаксис​

UNICODE_NORMALIZE(<str>, <mode>)

Параметры​

ПараметрОписание
<str>Входная строка для нормализации. Тип: VARCHAR
<mode>Режим нормализации. Должен быть константной строкой (без учёта регистра). Поддерживаемые режимы:
- NFC: каноническая декомпозиция с последующей канонической композицией
- NFD: каноническая декомпозиция
- NFKC: декомпозиция совместимости с последующей канонической композицией
- NFKD: декомпозиция совместимости
- NFKC_CF: NFKC с последующей свёрткой регистра

Возвращаемое значение​

Возвращает значение типа VARCHAR, представляющее результат нормализации входной строки.

Примеры​

  1. Различие между NFC и NFD (символы в составной и разложенной формах)
-- 'Café' where é may be in composed form, NFD will decompose it into e + combining accent
SELECT length(unicode_normalize('Café', 'NFC')) AS nfc_len, length(unicode_normalize('Café', 'NFD')) AS nfd_len;
+---------+---------+
| nfc_len | nfd_len |
+---------+---------+
| 4 | 5 |
+---------+---------+
  1. NFKC_CF для свёртки регистра
SELECT unicode_normalize('ABC 123', 'nfkc_cf') AS result;
+---------+
| result |
+---------+
| abc 123 |
+---------+
  1. Обработка полноширинных символов с помощью NFKC (декомпозиция совместимости)
-- Fullwidth digits '123' will be converted to halfwidth '123'
SELECT unicode_normalize('123ABC', 'NFKC') AS result;
+--------+
| result |
+--------+
| 123ABC |
+--------+
  1. Обработка специальных символов с помощью NFKD (декомпозиция совместимости)
-- ℃ (degree Celsius symbol) will be decomposed to °C
SELECT unicode_normalize('25℃', 'NFKD') AS result;
+--------+
| result |
+--------+
| 25°C |
+--------+
  1. Обработка чисел, обведённых кружком
-- ① ② ③ circled numbers will be converted to regular digits
SELECT unicode_normalize('①②③', 'NFKC') AS result;
+--------+
| result |
+--------+
| 123 |
+--------+
  1. Сравнение разных режимов на одной строке
SELECT 
unicode_normalize('fi', 'NFC') AS nfc_result,
unicode_normalize('fi', 'NFKC') AS nfkc_result;
+------------+-------------+
| nfc_result | nfkc_result |
+------------+-------------+
| fi | fi |
+------------+-------------+
  1. Пример сравнения строк на равенство
-- Use normalization to compare visually identical but differently encoded strings
SELECT unicode_normalize('café', 'NFC') = unicode_normalize('café', 'NFC') AS is_equal;
+----------+
| is_equal |
+----------+
| 1 |
+----------+