照合順序のワナ

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ではこんなことなかったのに!

そういうわけですので、照合順序をデフォルトインストール時と変更しなければならない際には、テーブルレイアウトの大文字小文字からきちんと意識してやらないと、開発がえらい面倒になりますので、ご注意くださいませね。