3.6.7 SQL Serverと接続する場合の前提条件と注意事項

ここでは,SQL Serverと接続する場合の前提条件と注意事項について説明します。

<この項の構成>
(1) SQL Serverの場合の前提条件
(2) SQL Serverと接続する場合の注意事項

(1) SQL Serverの場合の前提条件

SQL Serverの場合の前提条件について示します。

なお,SQL Serverと接続できるのはWindowsの場合だけです。

(2) SQL Serverと接続する場合の注意事項

ここでは,SQL Serverと接続する場合のシステムでの文字コード変換に関する注意事項とDB Connector設定時の注意事項について説明します。

(a) システムでの文字コード変換時の注意

SQL Server接続時,データベースに日本語文字コードを含むデータを格納する場合,システムでの文字コード変換について考慮する必要があります。ここでは,システムでの文字コード変換の概要と,文字化けを回避するために設定時に注意することについて説明します。

Javaでは日本語文字コードはUnicodeで表現されます。SQL Serverを使用する場合,Webクライアントとアプリケーションサーバ間,およびアプリケーションサーバとSQL Server間の処理で文字コード変換が実施されます。

SQL Serverを使用する場合の文字コード変換の概要を次の図に示します。

図3-19 SQL Serverを使用する場合の文字コード変換の概要

[図データ]

図中の1.~4.について説明します。

  1. アプリケーションサーバがWebクライアントからデータを受信する時に,外部文字コードからUnicodeに変換されます。
  2. アプリケーションサーバがデータをSQL Serverに格納する時に,Unicodeからデータベース格納文字コードに変換されます。
  3. SQL Serverに格納されたデータをアプリケーションサーバが取得する時に,データベース格納文字コードからUnicodeに変換されます。
  4. アプリケーションサーバがデータをWebクライアントに送信する時に,Unicodeから外部文字コードに変換されます。

SQL Serverを使用する場合,外部文字コードとデータベース格納文字コードの組み合わせや,文字コード変換を実施する場合に使用されるコンバータの種類によっては,文字化けなどの問題が発生することがあります。このような文字化けを回避するためには,文字コードの設定に注意する必要があります。

SQL Serverでは次の表に示す文字データ型をサポートしています。SQL Serverを使用する場合,Unicodeデータ型を使用することによって,文字コード変換時に発生する文字化けを防ぐことができます。

表3-34 SQL Serverでサポートする文字データ型

カテゴリ文字データ型
Unicodeデータ型nchar,nvarchar,ntext
非Unicode文字データ型char,varchar,text

次に,SQL Serverでのデータベース格納文字コードとして,Unicodeデータ型を使用する場合と,非Unicodeデータ型を使用する場合の文字コード変換について説明します。

Unicodeデータ型を使用する場合
DB ConnectorのプロパティのsendStringParametersAsUnicodeキーにtrue(デフォルト値)を設定している場合,文字化けは発生しません。falseを設定した場合,外部文字コードにShift_JIS,EUC-JP,ISO-2022-JP,またはUTF-8を使用すると文字化けが発生することがあります。
非Unicode文字データ型を使用する場合
外部文字コードの設定によって,文字化けが発生することがあります。
  • 外部文字コードにWindows-31Jを使用する場合
    文字化けは発生しません。
  • 外部文字コードにShift_JIS,EUC-JP,またはISO-2022-JPを使用する場合
    次に示す文字などで文字化けが発生します。

    [図データ]

  • 外部文字コードにUTF-8を使用する場合
    次に示す文字などで文字化けが発生します。

    [図データ]

(b) DB ConnectorのselectMethodプロパティ設定時の注意

DB ConnectorのselectMethodプロパティ(<config-property-name>の項目名)の値に「direct」を設定した場合の注意事項を次の表に示します。

表3-35  DB ConnectorのselectMethodプロパティ設定時の注意事項

条件注意事項
コネクションの障害検知機能が有効コネクションに障害が発生していても正常であると誤診することがあります。その結果,ユーザアプリケーションプログラムに障害が発生したコネクションを返すことがあるので,コネクションの障害検知機能を使用しないでください。障害が発生したら,cjclearpoolコマンドを実行してください。
Statement,PreparedStatement,CallableStatementを複数同時に生成SQL ServerのJDBCドライバによって,同時に生成したステートメントごとにSQL Server 2000への接続が生成されます。
また,ステートメントプーリング機能を使用する場合には,プールされているステートメントごとに接続が生成され,メモリを多く消費するので注意してください。