utf8mb4の照合順序について調べてみた

MySQLで文字型のカラムを作成する時に、照合順序をどうするか悩む場合があります。

今回はUTF-8での照合順序の違いを調べてみました。

MySQL8.0の文字コードutf8mb4で、日本語が絡んできそうな照合順序には以下のものがあります。

utf8mb4_bin
utf8mb4_general_ci
utf8mb4_unicode_ci
utf8mb4_unicode_520_ci
utf8mb4_0900_ai_ci
utf8mb4_0900_as_ci
utf8mb4_0900_as_cs
utf8mb4_ja_0900_as_cs
utf8mb4_ja_0900_as_cs_ks

utf8mb4_binは文字をバイナリで比較します。

「a」と「A」は文字コードが違うので異なる文字として扱われます。

それに対してutf8mb4_general_ciとutf8mb4_unicode_ciはアルファベットの大文字と小文字を区別しません。

「a」と「A」は同じ文字として扱われます。

照合順序名の末尾にある「ci」は大文字小文字を区別しない(Case Insensitive)という意味です。

utf8mb4_general_ciとutf8mb4_unicode_ciでは、日本語の扱いに違いがあります。

utf8mb4_general_ciでは「あ」と「ア」は異なる文字として扱われるのですが、utf8mb4_unicode_ciでは同じ文字として扱われます。

さらにutf8mb4_unicode_ciでは「は」「ぱ」「ば」「ハ」「バ」「パ」も同じ文字として扱われます。

utf8mb4_general_ciとutf8mb4_unicode_ciには問題があり、UTF-8で4バイトの文字は全て同じ文字として扱われます。

有名な「寿司ビール問題」がそれです。

utf8mb4_unicode_520_ciではその問題が解消されました。

utf8mb4_unicode_ciとutf8mb4_unicode_520_ciの違いは、文字を照合する際のUnicodeのバージョンが4.0.0から5.2.0になったことです。

これによって4バイト文字も適切に扱えるようになりました。

以下の照合順序はUnicodeのバージョンが9.0.0に上がっています。

utf8mb4_0900_ai_ci
utf8mb4_0900_as_ci
utf8mb4_0900_as_cs
utf8mb4_ja_0900_as_cs
utf8mb4_ja_0900_as_cs_ks

照合順序名の末尾に「ai」「cs」「ks」などが付いています。

それぞれ以下の意味になります。
|文字|意味 |例 |
|—-|————————————————–|——|
| ai |アクセントの違いを区別しない(Accent Insensitive)|A = Ä |
| as |アクセントの違いを区別する(Accent Sensitive) |A ≠ Ä|
| ci |大文字・小文字を区別しない(Case Insensitive) |A = a |
| cs |大文字・小文字を区別する(Case Sensitive) |A ≠ a|
| ks |ひらがな・カタカナを区別する(Kana Sensitive) |あ ≠ ア|

「ai」の場合「ぱ」と「ば」を区別しません。

また、「ci」の場合「や」と「ゃ」を区別しません。

「_ja」がつく照合順序の場合は「_ks」が付くか付かないかで、ひらがな・カタカナを区別するかしないかが分かれました。

以上のことをまとめると以下の表のようになりました。

utf8mb4_general_ci、utf8mb4_unicode_ciはUnicodeのバージョンが古く、4バイト文字の区別ができないので使用すべきではないです。

utf8mb4_unicode_520_ciもUnicodeのバージョンが古いので使用する意味がなさそうです。

日本語が入るカラムであれば、utf8mb4_ja_0900_as_cs_ksを選択するのが無難でしょうか。

名前を検索する時に「は」で検索したら「馬場」さんも検索結果に含めたい時などはutf8mb4_0900_ai_ciを使うと便利です。

今回はイコール「=」で一致するかどうかを見ましたが、LIKE検索をした場合や「>」「<」で大きさを比較した場合は違った結果が得られました。

まだまだ照合順序の奥は深そうです。

システム部ではデータベースのスペシャリストを募集しています。

我こそはと思う方がいましたら、 システム部で一緒に働きましょう。

スタッフブログ最新記事

Youtube最新掲載動画

【「新人女性スタッフ」インタビュー (入社初日の研修終わりにイロイロ質問してきました!)

「新人女性スタッフ」にインタビューをしてきました。彼女の「研修の感想」「研修担当者の印象」「今後の夢・目標」とあわせて「会社の雰囲気」を感じ取ってもらえたら嬉しいです!いわゆる「風俗」のイメージとは、きっとだいぶ違うものをお感じになられると思います(^^)

【池袋の人気風俗店】女の子待機所&受付 ★NEW 78秒 お店紹介動画★

東京・池袋の「人気風俗店」の「女の子待機所」と「受付所」を撮影してきました。 2019/8にもこちらのお店を撮影した動画を公開していますが、床を張り替えてキレイになりましたので、またムービーを撮ってまいりました。 「女の子待機所」を目にする機会はなかなかありませんので、ぜひご覧ください。

横浜 日ノ出町の【人気コスプレ風俗店】の「受付」「女の子待機所」を100秒でご紹介!!

横浜日ノ出町駅の「風俗店」の「受付&女の子待機所」を公開しています! 「コスプレ店」もあるので受付にはお客様が直接「見て」「触って」選べるように「コスプレ衣装」「下着」「小物」が所狭しとディスプレイされています。 動画の後半では「女の子の待機所」も少しだけ公開しています。風俗でお仕事をしないと絶対に足を立ち入ることはない「秘密の花園」ですので、風俗にご興味がある方は、ぜひ最後までご覧ください。

五反田店「巨乳」「人妻」「風俗エステ」「オナクラ」の【裏側】を撮影してきました!!

風俗のメッカ「五反田」で人気のシンデレラFCグループのお店の「裏側」を撮影してまいりました! 映画やドラマに出てくるような「アウトロー」「アングラ」「暗い雰囲気」はなく、ごく普通の事務所です!どの風俗店で働こうかな?とお考えの際の参考材料としてぜひご覧ください。

スタッフブログ最新記事

月別 アーカイブ

2022年

2021年

2020年

2019年

2018年

2017年

2016年

2015年

2014年

2013年

2012年

2011年

2010年

2009年

2008年

2007年

教育官ブログ
\風俗業界時評/シン・コラム
英語スタッフブログ!