Oracle Character Set変換(2): 3. Client環境の構成(1)
Oracle Character Set変換クライアント環境の構成について説明します。 Server Character SetとClient NLS_LANG設定を9つのテストケースに分けて、それぞれをテストした結果を確認することができる。
前の記事で続く内容だ。
Oracle Character Set変換(1):1.必要性、正しいOracle Character Set設定ガイド
3. Oracle Character Set変換クライアント環境の構成
Oracle ClientでCharacter Setを設定するための環境変数はNLS_LANGです。
*注Oracleドキュメント: Choosing a Locale with the NLS_LANG Environment Variable (oracle.com)
多くの場合、Client NLS_LANGはServerのCharacter Setと一致する必要があると思いますが、これは強制的ではありません。 Server Character Setは文字列データを「保存」するための設定であり、Client NLS_LANGは文字列データを「表示」し、「転送」するための設定である。
言い換えれば、Server Character Setが正しく設定されていない場合は文字列データの保存が間違っています。
Server Character SetとClient NLS_LANG設定のケースを次のように定義してテストした結果を見てみましょう。
ケース# | Server Character Set | Client NLS_LANG |
1 | US7ASCII | AMERICAN_AMERICA.KO16KSC5601 |
2 | US7ASCII | AMERICAN_AMERICA.KO16MSWIN949 |
3 | US7ASCII | AMERICAN_AMERICA.US7ASCII |
4 | KO16MSWIN949 | AMERICAN_AMERICA.KO16KSC5601 |
5 | KO16MSWIN949 | AMERICAN_AMERICA.KO16MSWIN949 |
6 | KO16MSWIN949 | AMERICAN_AMERICA.US7ASCII |
7 | AL32UTF8 | AMERICAN_AMERICA.KO16KSC5601 |
8 | AL32UTF8 | AMERICAN_AMERICA.KO16MSWIN949 |
9 | AL32UTF8 | AMERICAN_AMERICA.AL32UTF8 |
Server Character Setを異なる方法でテストするために、Local PCに3つのOracleインスタンスを構成し、TNS名をそれぞれoraus7、oramswin949、orautfとして指定しました。
- oraus7: US7ASCII
- oramswin949: KO16MSWIN949
- orautf: AL32UTF8
各テストケースの入力値は「ハングル」と「シャット」の2つに選ばれました。
「ハングル」は一般的なハングル入出力が可能であることを確認したいものであり、「シャッ」はKSC5601でサポートしていない文字に対する入出力を確認したい。
テストスクリプト(例)と説明は次のとおりです。
-- Windows command prompt 환경 title Test Case (1) US7ASCII, AMERICAN_AMERICA.KO16KSC5601 set NLS_LANG=AMERICAN_AMERICA.KO16KSC5601 sqlplus -S leg/leg@oraus7 -- sqlplus 환경 TRUNCATE TABLE Z_TEST; INSERT INTO Z_TEST(VAL) VALUES('한글'); INSERT INTO Z_TEST(VAL) VALUES('샾'); COMMIT; SELECT VAL, DUMP(VAL, 1016) DP FROM Z_TEST; EXIT;
- 行2:識別を容易にするためにコマンドプロンプトウィンドウのタイトルを設定します(テストケースごとに異なる設定をします。以下を参照)。
- 行3:NLS_LANG設定(各テストケースごとに異なる設定をします。以下を参照)
- 行4:sqlplusの実行と接続(テストケースごとに異なる設定をします。以下を参照)
- 行7:テストテーブル(Z_TEST)Truncate
- 行8:「ハングル」値を入力
- 9行目:「シャッ」の値を入力
- 10行目:COMMITを実行
- 行11:入力値とDUMP関数の結果値を出力
- 注:DUMP関数の2番目のパラメータを1016に指定すると、格納されている値の長さ(バイト数)、文字セット、各バイトの16進表現値を確認できます。
- 12行目:終了
3.1。テストケース別結果
3.1.1. Case #1 (US7ASCII – KO16KSC5601)
- Server Character Set: US7ASCII (sqlplus -S leg/leg@us7ascii)
- Client NLS_LANG: AMERICAN_AMERICA.KO16KSC5601
- 実行結果
- 「ハングル」:入力は成功、出力は失敗(疑問符(??)で出力)
- 「シャット」:入力に失敗しました
3.1.2。 Case #2 (US7ASCII – KO16MSWIN949)
- Server Character Set: US7ASCII (sqlplus -S leg/leg@us7ascii)
- Client NLS_LANG: AMERICAN_AMERICA.KO16MSWIN949
- 実行結果
- 「ハングル」:入力は成功、出力は失敗(疑問符(??)で出力)
- 「シャット」:入力は成功、出力は失敗(疑問符(?)で出力)
3.1.3。 Case #3 (US7ASCII – US7ASCII)
- Server Character Set: US7ASCII (sqlplus -S leg/leg@us7ascii)
- Client NLS_LANG: AMERICAN_AMERICA.US7ASCII
- 実行結果
- 「ハングル」:入力、出力の成功(誤って保存されている状態)
- 「シャット」:入力、出力成功(誤って保存されている状態)
3.1.4。 Case #4 (KO16MSWIN949 – KO16KSC5601)
- Server Character Set: KO16MSWIN949 (sqlplus -S leg/leg@oramswin949)
- Client NLS_LANG: AMERICAN_AMERICA.KO16KSC5601
- 実行結果
- 「ハングル」:入力、出力成功
- 「シャット」:入力に失敗しました
3.1.5。 Case #5 (KO16MSWIN949 – KO16MSWIN949)
- Server Character Set: KO16MSWIN949 (sqlplus -S leg/leg@oramswin949)
- Client NLS_LANG: AMERICAN_AMERICA.KO16MSWIN949
- 実行結果
- 「ハングル」:入力、出力成功
- 「シャット」:入力、出力成功
3.1.6。 Case #6 (JA16MSWIN949 – US7ASCII)
- Server Character Set: KO16MSWIN949 (sqlplus -S leg/leg@oramswin949)
- Client NLS_LANG: AMERICAN_AMERICA.US7ASCII
- 実行結果
- 「ハングル」:入力は成功、出力は失敗(疑問符(????)で出力)
- 「シャット」:入力は成功、出力は失敗(疑問符(??)で出力)
3.1.7。 Case #7 (AL32UTF8 – KO16KSC5601)
- Server Character Set: AL32UTF8 (sqlplus -S leg/leg@orautf)
- Client NLS_LANG: AMERICAN_AMERICA.KO16KSC5601
- 実行結果
- 「ハングル」:入力、出力成功
- 「シャット」:入力に失敗しました
3.1.8。 Case #8 (AL32UTF8 – KO16MSWIN949)
- Server Character Set: AL32UTF8 (sqlplus -S leg/leg@orautf)
- Client NLS_LANG: AMERICAN_AMERICA.KO16MSWIN949
- 実行結果
- 「ハングル」:入力、出力成功
- 「シャット」:入力、出力成功
3.1.9。 Case #9-1 (AL32UTF8 – AL32UTF8)
- Server Character Set: AL32UTF8 (sqlplus -S leg/leg@orautf)
- Client NLS_LANG: AMERICAN_AMERICA.AL32UTF8
- 実行結果
- 「ハングル」:入力、出力成功
- 「シャット」:入力に失敗しました:Windowsコマンドプロンプト(cmd.exe)のデフォルトのコードページは949(ANSI)で、UTF-8入出力をサポートしていないため正常に実行されません。 UTF-8入出力をサポートするPowerShellで実行(Case #9-2)すると、正常に入出力になることが確認できる。
3.1.10。 Case #9-2 (AL32UTF8 – AL32UTF8) – UTF-8 対応 PowerShell で実行
- Server Character Set: AL32UTF8 (sqlplus -S leg/leg@orautf)
- Client NLS_LANG: AMERICAN_AMERICA.AL32UTF8
- 実行結果
- 「ハングル」:入力、出力成功
- 「シャット」:入力、出力成功
これまで、Oracle Character Set変換クライアント環境の構成とテストケース別の結果を見てきました。次の記事では、この結果をまとめて推奨構成について説明します。