【SQL Server】照合順序で文字の区別を設定する

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

Leave a Reply

Your email address will not be published. Required fields are marked *