MySQL 8.0: ひらがなカタカナを判別する日本語用Collation




MySQL 8.0: ひらがなカタカナを判別する日本語用Collation

以前の記事では、MySQL 8.0.1で導入された新しい 日本語のutf8bm4のCollation(文字照合順)について ご紹介しました。このcollation (utf8mb4_ja_0900_as_cs) は、CLDR 30で定義されたアクセント記号(清音濁音半濁音)ならびに大文字小文字(拗音促音など)を判別する実装となっています。

今日ご紹介するのはひらがなカタカナを判別できる新しい「かなセンシティブ」なCollation utf8mb4_ja_0900_as_cs_ksです。DUCETではひらがながカタカナよりも前にソートされるように3次レベルの重みを定義しています。例えば:

3042 ; [.3D5A.0020.000E] # HIRAGANA LETTER A
30A2 ; [.3D5A.0020.0011] # KATAKANA LETTER A

2次レベルでの違い(000E および 0011)によって 0x3042 (あ) < 0x30A2 (ア) となります。CLDRではひらがなとカタカナの違いは4次レベル(例: &あ<<<<ア)で比較するよう定義されています。デフォルトの比較レベルは3次レベル(強さ 3)となっており、最初の3次レベルでみると同じとなります。

utf8mb4_ja_0900_as_cs_ksについて

utf8mb4_ja_0900_as_csに対していただいたフィードバックにお応えする形で、ひらがなとカタカナを判別する新しいCollationである utf8mb4_ja_0900_as_cs_ks を追加することにしました。ここでの’_ks’は「かなセンシティブ Kana Sensitive」を意味しています。

このCollationは最初の3次レベルまでが同じひらがなとカタカナの判別に必要となる4次レベルでの処理を行います。以下の例では、utf8mb4_ja_0900_as_cs および utf8mb4_ja_0900_as_cs_ks のそれぞれのCollationでの文字列比較結果です:

mysql> SET @s1 = CONVERT('きゅう' USING utf8mb4);
Query OK, 0 rows affected (0.01 sec)

mysql> SET @s2 = CONVERT('キュウ' USING utf8mb4);
Query OK, 0 rows affected (0.00 sec)

mysql> SET @s3 = CONVERT('きゆう' USING utf8mb4);
Query OK, 0 rows affected (0.00 sec)

mysql> SET @s4 = CONVERT('キユウ' USING utf8mb4);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT STRCMP(@s1 COLLATE utf8mb4_ja_0900_as_cs, @s2);
+------------------------------------------------+
| STRCMP(@s1 COLLATE utf8mb4_ja_0900_as_cs, @s2) |
+------------------------------------------------+
|                                              0 |
+------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT STRCMP(@s2 COLLATE utf8mb4_ja_0900_as_cs, @s3);
+------------------------------------------------+
| STRCMP(@s2 COLLATE utf8mb4_ja_0900_as_cs, @s3) |
+------------------------------------------------+
|                                             -1 |
+------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT STRCMP(@s3 COLLATE utf8mb4_ja_0900_as_cs, @s4);
+------------------------------------------------+
| STRCMP(@s3 COLLATE utf8mb4_ja_0900_as_cs, @s4) |
+------------------------------------------------+
|                                              0 |
+------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT STRCMP(@s1 COLLATE utf8mb4_ja_0900_as_cs_ks, @s2);
+---------------------------------------------------+
| STRCMP(@s1 COLLATE utf8mb4_ja_0900_as_cs_ks, @s2) |
+---------------------------------------------------+
|                                                -1 |
+---------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT STRCMP(@s2 COLLATE utf8mb4_ja_0900_as_cs_ks, @s3);
+---------------------------------------------------+
| STRCMP(@s2 COLLATE utf8mb4_ja_0900_as_cs_ks, @s3) |
+---------------------------------------------------+
|                                                -1 |
+---------------------------------------------------+
1 row in set (0.01 sec)

mysql> SELECT STRCMP(@s3 COLLATE utf8mb4_ja_0900_as_cs_ks, @s4);
+---------------------------------------------------+
| STRCMP(@s3 COLLATE utf8mb4_ja_0900_as_cs_ks, @s4) |
+---------------------------------------------------+
|                                                -1 |
+---------------------------------------------------+
1 row in set (0.00 sec)

この結果から
utf8mb4_ja_0900_as_csでは‘きゅう’ = ‘キュウ’ < ‘きゆう’ = ‘キユウ’
utf8mb4_ja_0900_as_cs_ksでは‘きゅう’ < ‘キュウ’ < ‘きゆう’ < ‘キユウ’
となることが確認できました。

まとめ

この新しいCollationは Labs release (実験室版) のMySQL 8.0.1にて動作確認いただけます。またMySQL 8.0.2にて標準機能として利用可能となる予定です。

ぜひお試しいただきフィードバックをお送りいただければと思います。…

Source: MySQL 8.0: ひらがなカタカナを判別する日本語用Collation




About KENNETH 9042 Articles
지락문화예술공작단

Be the first to comment

Leave a Reply

Your email address will not be published.


*


This site uses Akismet to reduce spam. Learn how your comment data is processed.