uso

雑記いろいろ
★書いてある内容に保証は一切ありません。
 ご自身で判断をしてください。

[SQL]SqlServerの文字列検索

2020-09-16 13:05:42 | work
■久しぶりにハマった

・SQLServerのデフォルト設定では文字列検索はけっこう曖昧
 スペースの全半角を区別しないとか、大文字小文字を区別しないとか
・この辺のサイトを参考にさせていただきました
 https://johobase.com/sqlserver-where-collate/
 https://www.projectgroup.info/tips/SQLServer/MSSQL_00000005.html
・MS公式、SQL照合順序(COLLATE)について
 https://docs.microsoft.com/ja-jp/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver15

・「文字列」の検索が曖昧なのは、SQLとしてはいいことらしい(今までそう言うケースに遭遇したことはないが・・・)
・なので文字列の重複チェックするときとか気をつけないと地雷を踏む

■チェックする方法とか対策

・DBデフォルトの照合順序を確認
 SELECT SERVERPROPERTY('collation')
・検索時にCOLLATEを変える場合
 select hoge1, hoge2 from hoge where hoge1 COLLATE Japanese_Bin like 'hogehoge  '
※「=」ではなく「LIKE」検索しないと末尾のスペースが考慮されない事象にも遭遇
 https://blog.engineer-memo.com/2014/12/20/sql-server-%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%8F%AF%E5%A4%89%E9%95%B7%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E6%9C%AB%E5%B0%BE%E3%81%AE%E7%A9%BA%E7%99%BD%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/

末尾スペース無視もSQL的にはOKらしいが、LIKEは大丈夫というのも違和感。。
もしかしたら、カラムの型によって末尾SPは挙動が違うかもしれない。今回遭遇したカラムは「nvarchar」。
型によってはスペース埋めすると言う話くらいは聞いたことある…。

SQLServer罠多すぎ…
自分が知らなすぎるから罠にはまるのか…

最新の画像もっと見る