に最終更新
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 型で返します。
例
- 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 |
+---------+---------+
- 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 |
+----------+