Oracle使い向け OracleとSQLServerの違い

posted in: SQLServer | 0

ワダと申します。初めてブログを書きます。

今回は、OracleとSQLServerの違いについてご紹介したいと思います。
Oracleはそこそこ経験があるけれどSQLServerについてはあまり経験がない、という方にこの記事が少しでもお役にたてば幸いです。

※SQLServer2016、SQLServer Management Studioのインストールを行う必要があります。
インストールの詳細手順については、以下のサイトが参考になります。

■ SQLServerでは「Null」と「空文字」の扱いがOracleとは異なる

SQLServerでは「Null」と「空文字」の扱いがOracleとは異なる点に注意が必要です。
※NULLは「空っぽ」、空文字は「長さ0の文字列」を意味するものとします。

ひとことで言うと、SQLServerは「NULLと空文字は別物」、Oracleは「NULLと空文字はどちらもNULL」となります。

NULLと空文字が格納されたテーブルをSQL Server Management Studio(SSMS)で確認してみると、
データの4件目、5件目で、BUSYO列がそれぞれ”(空文字)、NULLとなっています。

SQLServer

05_select1kekka

Oracle

10_select1kekka_oracle

Oracleでは、空文字、NULLがどちらもNULLとして扱われます。

以下のようにWHERE句にNULLを含めている場合にも、検索結果が異なるので注意が必要です。

SQLServer

07_select3kekka

Oracle

12_select3kekka_oracle

■ データベースの文字コードはどうなっている?

SQLServerで現在のデータベースの文字コードを確認したい場合は、どうすればよいのでしょうか。
Oracleの場合は、「NLS_CHARACTERSET」プロパティを確認すればOKですが、
SQLServerの場合はデータを格納する際の文字コード(コードページ)は「照合順序(Collation)」に依存します。

照合順序とは?

「SQL Server では、文字の大小関係を比較する場合の基準を照合順序 (collation) と呼んでいます。
例えば、「朝」と「海」ではどちらが大きいのか、「あ」「ア」「ア」を大きい順に並べた場合どのように並ぶのかといった、文字の大小関係を決めているのが照合順序です。」

「照合順序 – 文字の比較と並び順 (その 1)」

照合順序には、サーバーの照合順序とデータベースの照合順序があり、
データベースの照合順序を設定しない場合はサーバーの照合順序が使用されます。

たとえば、Windowsシステムロケールが日本の場合、
サーバーの照合順序は「Japanese_90_CI_AS」となります。

この照合順序を使用する場合、コードページが932(=Shift_JIS)となり、これがデータベースに格納される文字となります。

「Japanese_90_CI_AS」」の意味は次の通り。

  • 「C」-Case:大文字小文字(例:”A”と”a”)
  • 「I」-Insensitive:識別しない 
  • 「S」-Sensitive:識別する
  • 「A」-Accesnt:アクセント記号

⇒「日本語・大文字小文字は識別しない・アクセントは識別する」という意味。Like検索やソート順に影響があります。

照合順序の種類は多数あります。
意味、詳細な設定方法については以下のサイトを参考にしてみてください。

データベースの照合順序の設定または変更

■ サンプル(JDBCアプリケーション)

サンプルプログラムを通して先ほどのテーブルにアクセスし、内容を確認してみましょう。
※以下はJavaのバージョン「1.7.0_09」が動作する環境での実施例です。

1. ソース「Sample.java」

2. サンプル用テーブル作成

SQL Server Management Studio(SSMS)上で、テーブルを作成します。

「CLUSTERED」は、主キーに設定されるインデックスのデフォルト値です。(インデックスについては今回は説明を割愛します。)

テーブルが作成できたら、サンプル用データを投入します。

SSMSを利用してデータを投入する場合、デフォルトではコミットが自動的に行われる設定になっています。
そのため、デフォルト設定になっている場合はINSERTの後「commit」を実行する必要はありません。

3. JDBCドライバ

Microsoftのサイトからダウンロードします。今回は「Microsoft SQL Server 用 JDBC Driver 6.0 」を使ってみましょう。

https://www.microsoft.com/ja-jp/download/details.aspx?id=11774

ダウンロードしたexeファイルを実行します。実行後に作成されるフォルダに格納されている、「sqljdbc41.jar」を使用します。

4. サンプル実行

任意の場所に、サンプルソースとJDBCドライバ「sqljdbc41.jar」を配置します。

例:D:\test に配置する。

ソースをコンパイルします。

実行します。

5. 実行結果

実行結果

以上となります。

SQLServerについてOracleに慣れていると違和感を感じがちなポイントを押さえておくと、業務であわてずに済む場面があるかもしれません。
私自身まだまだ勉強中の段階ですので、今後も理解を深めていきたいです。

LINEで送る
Pocket