DB

SQL Server上で英大文字小文字を区別して検索できるようにしてみた

以下の記事に記載したように、SQL Serverの場合、デフォルトの設定だと英大文字小文字を区別しないで検索を行う。

デフォルト設定の各DB上で英大文字小文字を区別して検索するかどうか調べてみたデータベースの種類によっては、英大文字小文字を区別して検索するものもあれば、区別しないで検索するものもある。 今回は、Oracle...

その理由は、以下のSQLで、user_dataテーブルの入っているmasterデータベースの照合順序(Collation)を確認したとき、「Japanese_CI_AS」という大文字小文字を区別しない設定になっているためである。

前提条件

なお、照合順序「Japanese_CI_AS」の意味については、以下のサイトを参照のこと。
http://www.innoya.com/board/ViewTip.aspx?menuID=4&page=2&idx=666

今回は、照合順序を、「Japanese_CS_AS」という大文字小文字を区別する設定に、SQL・テーブルの列・データベース単位で変更してみたので、その結果を共有する。

前提条件

下記記事の前提条件を満たしていること。

デフォルト設定の各DB上で英大文字小文字を区別して検索するかどうか調べてみたデータベースの種類によっては、英大文字小文字を区別して検索するものもあれば、区別しないで検索するものもある。 今回は、Oracle...

やってみたこと

  1. SQLによる照合順序変更指定
  2. テーブルの列による照合順序変更指定
  3. データベースによる照合順序変更指定

SQLによる照合順序変更指定

SQL文で英大文字小文字を区別するよう変更するには、照合順序を変更したい条件句の末尾に「 COLLATE Japanese_CS_AS」を付与する。その実行結果は以下の通りで、英大文字小文字を区別して検索することが確認できる。

1) 抽出対象となるテーブルのデータは、以下の通り。

SQLによる照合順序変更指定_1

2) 照合順序を変更したい条件句の末尾に「 COLLATE Japanese_CS_AS」を付与して実行した結果は、以下の通り。

SQLによる照合順序変更指定_2_1

SQLによる照合順序変更指定_2_2

SQLによる照合順序変更指定_2_3



「MiniTool Partition Wizard」はパーティション分割・統合・バックアップ・チェックを直感的に行える便利ツールだったハードディスクの記憶領域を論理的に分割し、分割された個々の領域のことを、パーティションといいます。 例えば、以下の図の場合、C/D...

テーブルの列による照合順序変更指定

テーブルの列定義で英大文字小文字を区別するよう変更するには、alter column句の末尾に「 COLLATE Japanese_CS_AS」を付与する。その実行結果は以下の通りで、英大文字小文字を区別して検索することが確認できる。なお、テーブルに対しては照合順序変更指定ができないので注意すること。

1) 抽出対象となるテーブルのデータは、以下の通り。

テーブルの列による照合順序変更指定_1

2) テーブルの列定義で英大文字小文字を区別するよう変更するSQLの実行結果は、以下の通り。

テーブルの列による照合順序変更指定_2

3) テーブルの列定義変更後のSQL実行結果は、以下の通り。

テーブルの列による照合順序変更指定_3_1

テーブルの列による照合順序変更指定_3_2

テーブルの列による照合順序変更指定_3_3



freelance hubを利用して7万件を超える案件情報からJava Spring案件を検索してみたfreelance hubは、レバテックフリーランスやフリエン(furien)を始めとした多くのフリーランスエージェントの案件をまとめて...

データベースによる照合順序変更指定

データベース単位で英大文字小文字を区別するよう変更するには、alter database文で照合順序を変更する。その実行結果は以下の通りで、英大文字小文字を区別して検索することが確認できる。なお、masterデータベース等のシステムデータベース上では照合順序の変更が行えないため、独自データベース上で結果を確認している。

1) データベース変更前の照合順序の設定は、以下の通り。

データベースによる照合順序変更指定_1

2) データベースの照合順序を変更するSQLの実行結果は、以下の通り。

データベースによる照合順序変更指定_2

3) データベース変更後の照合順序の設定は、以下の通り。

データベースによる照合順序変更指定_3

4) user_dataテーブルを新設し、データを追加した結果は、以下の通り。

データベースによる照合順序変更指定_4_1

データベースによる照合順序変更指定_4_2

データベースによる照合順序変更指定_4_3

5) データベース定義変更し、テーブル追加後のSQL実行結果は、以下の通り。

データベースによる照合順序変更指定_5_1

データベースによる照合順序変更指定_5_2

データベースによる照合順序変更指定_5_3

なお、データベースの照合順序を変更しても、既存のテーブルの照合順序は変更されないので、注意すること。照合順序についての詳細は、以下の公式サイトを参照のこと。
https://docs.microsoft.com/ja-jp/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver15

要点まとめ

  • デフォルトの設定だと、SQL Serverでは英大文字小文字を区別しないで検索するが、SQL・テーブルの列・データベース単位で、照合順序を「Japanese_CS_AS」と変更することで、英大文字小文字を区別して検索を行うようになる。