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型を返します。入力文字列の正規化結果を表します。
例
- 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 |
+---------+---------+
- ケースフォールディング用のNFKC_CF
SELECT unicode_normalize('ABC 123', 'nfkc_cf') AS result;
+---------+
| result |
+---------+
| abc 123 |
+---------+
- 全角文字を処理するNFKC(互換分解)
-- Fullwidth digits '123' will be converted to halfwidth '123'
SELECT unicode_normalize('123ABC', 'NFKC') AS result;
+--------+
| result |
+--------+
| 123ABC |
+--------+
- NFKD による特殊記号の処理(互換分解)
-- ℃ (degree Celsius symbol) will be decomposed to °C
SELECT unicode_normalize('25℃', 'NFKD') AS result;
+--------+
| result |
+--------+
| 25°C |
+--------+
- 丸囲み数字の処理
-- ① ② ③ circled numbers will be converted to regular digits
SELECT unicode_normalize('①②③', 'NFKC') AS result;
+--------+
| result |
+--------+
| 123 |
+--------+
- 同じ文字列に対する異なるモードの比較
SELECT
unicode_normalize('fi', 'NFC') AS nfc_result,
unicode_normalize('fi', 'NFKC') AS nfkc_result;
+------------+-------------+
| nfc_result | nfkc_result |
+------------+-------------+
| fi | fi |
+------------+-------------+
- 文字列等価比較シナリオ
-- 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 |
+----------+