メインコンテンツまでスキップ

UNICODE_NORMALIZE

詳細

入力文字列に対してUnicode Normalizationを実行します。

Unicode正規化は、等価なUnicode文字シーケンスを統一された形式に変換するプロセスです。例えば、文字「é」は、単一のコードポイント(U+00E9)または「e」+結合鋭アクセント(U+0065 + U+0301)で表現できます。正規化により、これらの等価な表現が統一的に処理されることが保証されます。

Syntax

UNICODE_NORMALIZE(<str>, <mode>)

パラメータ

パラメータ説明
<str>正規化する入力文字列。型: VARCHAR
<mode>正規化モード。定数文字列である必要があります(大文字小文字を区別しません)。サポートされているモード:
- NFC: 正準分解、その後正準合成
- NFD: 正準分解
- NFKC: 互換分解、その後正準合成
- NFKD: 互換分解
- NFKC_CF: NFKC の後にCase Folding

戻り値

VARCHAR型を返します。入力文字列の正規化結果を表します。

  1. NFCとNFDの違い(合成文字 vs 分解文字)
-- '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 |
+----------+