はじめに
SQL Server は、「照合順序」の設定で変えられますが、デフォルト設定での値認識がかなり大雑把です。
便利ではあるのですが、キー値の処理など厳密に値を管理する必要がある場合は注意が必要です。
値を同一とみなすパターン
以下、それぞれで、同じレコードが検索されます。
値を同一とみなすということは、主キー値の場合は、両方INSERTしようとすると一意制約違反になります。
大文字小文字を同一とみなす
select * from T1 where T1.ID = 'A123';
select * from T1 where T1.ID = 'a123';
全角半角を同一とみなす
select * from T1 where T1.ID = 'A123';
select * from T1 where T1.ID = 'A123';
平仮名と片仮名を同一とみなす
select * from T1 where T1.NAME = 'あいうえお';
select * from T1 where T1.NAME = 'アイウエオ';
select * from T1 where T1.NAME = 'アイウエオ';
参考サイト
- 『照合順序 – 文字の比較と並び順 (その 1)』
https://blogs.msdn.microsoft.com/jpsql/2016/07/26/1-3/
おわりに
DBによって値の扱いが異なるので、思い込みで実装するのは危険ですね。