照合順序とは
- 文字列の並び順や比較のルール
- 「ソート順」に影響
- おもしろいのは集約への影響
「ナカシマ」と「ナガシマ」が同じものと扱われる!
照合順序の種類
- 半角全角を区別する/しない
- 濁点半濁点を区別する/しない
- カタカナを区別する/しない
- 大文字小文字を区別する/しない(アルファベット)
など
デフォルト設定
- 通常はより細かく区別する設定だと思います
- SQL Serverの場合、DB/テーブル/SQL内のカラムに指定可能
テーブル内のカラムにも指定できるかも・・・
SQLでの上書き
- SQL文でその場限りの照合順序を指定することが可能
濁点半濁点、半角全角を区別せず集計する例
select
id
, count(name)
from employee
group by name collate Japanese_AI_WI
使いどころ(実例)
- ユーザが入力する物件名にもとづいた集計
- こちらとしては厳密に集計するのが当然と考えていた
- しかしお客様は「入力のぶれを極力吸収するべき」との考え
→ 半角全角、濁点などを区別せず集計することに決定
文字コードとの関係
- 文字コード:文字をどうバイナリデータで表現するか
- 本来照合順序とは直行する話だが、セットで語られることが多い
どちらもソート順に影響を与えるし、文字コードに意識が行っていないときは照合順序にも意識が行っていいないことが多いと思われる
最後に
- DBを作るときに文字コードはよく話題に挙がるが、照合順序はそれほどでもない気がしたので話題にしました
- 「そもそもテキストで集約するのが曖昧さの原因では?」という考え方はある
→ 厳密さが必要な場合はコードで集約する - 知っていることが重要!