照合順序のワナ
SQL Server固有の話を書きますね。
SQL Server7.0あたりから、照合順序という概念が導入されました。
要は、検索のときにどういう辞書を使うのか?というのを決めておけるというもので、辞書の種類が豊富になったということが結構なメダマであるとCAMUSは感じています。
通常、デフォルトインストールでSQL Serverを導入すると、Japanese_CI_ASという照合順序になります。
Japaneseというのは見てのとおり「日本語」ということでして、CIというのは大文字小文字を区別しませんということ、ASというのはアクセントを区別しますということです。
もっと平たく言うと、検索時には大文字小文字は区別しません、シングルバイト・ダブルバイトも区別しません、ひらがなカタカナも区別しませんということなんです。
他にもいろいろあるのですが、Japanese_CI_ASとおなじ日本語でありながら、対極にあるといえるのがJapanese_BINでしょう。
要は、大文字小文字も区別すりゃ、シングルバイト・ダブルバイトは当然、ひらがなカタカナだってちゃんと区別するぞという形です。
コレが検索だけの世界だ…と思っていたら、実はそこにワナが潜んでいたのです。
検索のときに利用する言語は、SQLですよね。
そのSQLも、
大文字小文字を区別してくれる
ようになってしまうのです。
例えば、Japanese_CI_ASでは、
SELECT * FROM SYSOBJECTS
というSQLは通用しますが、Japanese_BINでは、通用しなくなります。
怒られてしまう箇所はSYSOBJECTSがありませんというような内容です。
というわけですので、Japanese_BINでも同じ動作をするSQLを書くには、
SELECT * FROM sysobjects
とsysobjectsを小文字で書くことが必須になってしまうのです。
うう、6.5ではこんなことなかったのに!
そういうわけですので、照合順序をデフォルトインストール時と変更しなければならない際には、テーブルレイアウトの大文字小文字からきちんと意識してやらないと、開発がえらい面倒になりますので、ご注意くださいませね。