SQL Serverで大文字・小文字/半角・全角などを区別するしないの設定を「照合順序」と言います。本記事では照合順序についての内容をまとめます。
照合順序とは
照合順序とは主に下記の区別を行うための設定です。
- 大文字 / 小文字
- 半角 / 全角
- ひらがな / カナタカ
- アクセント(濁音、半濁音)
照合順序の種類
照合順序の区別の種類は下記の通りです。
大文字・小文字 | CI(区別しない)/ CS(区別する) |
---|---|
アクセント | AI(区別しない)/ AS(区別する) |
ひらがな・カタカナ | KI(区別しない)/ KS(区別する) |
半角・全角 | WI(区別しない)/ WS(区別する) |
「I」がつくと区別しない、「S」がつくと区別する ということになります。
照合順序はデフォルトで「Japanese_CI_AS」が設定されています。
Japanese_CI_ASの特徴は下記の通りです。
- 大文字 / 小文字 を区別しない
- アクセントを区別する
- ひらがな / カタカナ を区別しない
- 半角 / 全角 を区別しない
「 Japanese_CI_AS 」には「KI」と「WI」がありませんが、その二つは区別しない場合は省略します。区別する場合のみ「KS」「WS」を付けます。
ひらがな・カタカナを区別したい場合は「Japanese_CI_AS_KS」
半角・全角を区別したい場合は「Japanese_CI_AS_WS」
すべて区別したい場合は「Japanese_CI_AS_KS_WS」もしくは「Japanse_BIN」
といった使い方をします。
照合順序の使い方(SELECT文で指定)
SELECT文で検索条件に照合順序を指定する場合は、下記のようにCOLLATE句を使います。
SELECT * FROM Person
WHERE Kana = 'ながのめい' COLLATE Japanese_CI_AS_KS
特に指定がなければ、ひらがな・カタカナは区別されません。
「Japanese_CI_AS_KS」を指定すると、ひらがな・カタカナを区別され検索結果が変わりました。
デフォルト照合順序の設定
照合順序はサーバー単位、DB単位、列単位でそれぞれ設定することができます。
サーバー (SQL Server のインスタンス)
SQL Server自体のデフォルト照合順序はインストール時に設定します。
インストール後の変更はできません(再インストールする必要がある)
照合順序の設定はオブジェクトエクスプローラーのインスタンスを右クリックで「プロパティ」から確認できます。
データベース
データベースの照合順序はDBの作成時に「オプション」ページから設定が出来ます。サーバーの設定から変える必要がなければ「既定」でOKです。
既存のDBの照合順序の確認は、 オブジェクトエクスプローラーのDBを右クリックで「プロパティ」から確認できます。
カラム
カラムの照合順序はテーブルの作成時に設定が出来ます。また、定義後に設定変更を行うことも可能です。
SSMSでテーブル作成時
テーブル作成時の列のプロパティから照合順序を設定できます。
列の照合順序の確認は、オブジェクトエクスプローラーの列を右クリックで「プロパティ」から確認できます。
CREATE TABLE
CREATE TABLE でテーブル作成時には下記のように、データ型と制約の間に記述します。
CREATE TABLE [dbo].[TEST](
[ID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Name] [nvarchar](10) NOT NULL,
[Kana] [nvarchar](20) COLLATE Japanese_CI_AS_KS NOT NULL,
[Age] [tinyint] NOT NULL,
)
また、ALTER TABLE で既存のテーブルの列を変更したい場合は下記のように記述します。
ALTER TABLE [dbo].[TEST]
ALTER COLUMN Kana [nvarchar](20) COLLATE Japanese_CI_AS_KS