今回はSI Object Browser(以下、OB)を使用して、オラクルのデータベースキャラクタセット(NLS_CHARACTER_SET)の確認をしてみたいと思います。
データベースキャラクタセット(NLS_CHARACTER_SET)はデータベース内で扱う文字コードです。
例えば「あ」という文字も保存する際にはバイナリ値で格納されます。
その際にどのようなバイナリ値に変換するかが「文字コード」「キャラクタセット」と呼ばれるものです。
データベースの設定に指定する文字コードはデータベースを稼動させるサーバーのOSの文字コードを使うことが多いです。有名なところで言うと「AL32UTF8」「JA16SJISTILDE」「JA16EUCTILDE」などがあります。
サーバーとクライアントとOS
データベースキャラクタセット(NLS_CHARACTER_SET)
データベース上で扱う文字コードです。データベース作成後に変更は出来ません。
データベースを稼動させるサーバーのOSの文字コードを使うことが多いです。
データベースクライアントの設定(NLS_LANG)
データベースから取り出した文字データをクライアント側でどのようなコードに変換するかの設定。
クライアントのOSで使用できない文字コードを選ぶと文字化けします。
コード変換する際に変換処理の時間がかかるため、NLS_CHARACTER_SETとNLS_LANGが同じである方がベターですが、クライアント側の設定は必ずしもNLS_CHARACTER_SETと同じものを指定する必要はありません。クライアント側で扱いやすい文字コードを選択します。
ちなみにOBで接続する際のNLS_LANGはデフォルト「UTF8」で接続します。
(※SI Object Browserは「UTF8」で接続することを前提として作成しておりますので、特に問題が無い場合は「UTF8」で使用してください)。
- ログオン時の文字コード指定 -
どこで確認できる?
データベースに接続した状態で【サポート情報】を開きます。
- サポート情報の場所 -
【サポート情報】を開いたら下へスクロールします。
一番下に接続情報がありますので、その中に「サーバー文字コード」があり、「NLS_CHARACTER_SET」が確認できます。
- サポート情報の接続情報で確認 -
隣に表示されている「NLS_NCHAR_CHARACTER_SET」はデータ型で「NCHAR」「NVARCHAR2」を使用した際に使われる文字コードです。
SQLで確認する場合は下記で確認します。
SELECT * FROM nls_database_parameters
WHERE parameter = 'NLS_CHARACTERSET';
いかがだったでしょうか。今回はキャラクタセットについての記事でした。
単に文字化けといっても、問題となりうる箇所は複数ありますので、場所を特定するときなどにお役立てください。
- カテゴリ:
- 【OBトコ】DBの勉強
- キーワード:
- Oracle