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 SetClient NLS_LANG
1US7ASCIIAMERICAN_AMERICA.KO16KSC5601
2US7ASCIIAMERICAN_AMERICA.KO16MSWIN949
3US7ASCIIAMERICAN_AMERICA.US7ASCII
4KO16MSWIN949AMERICAN_AMERICA.KO16KSC5601
5KO16MSWIN949AMERICAN_AMERICA.KO16MSWIN949
6KO16MSWIN949AMERICAN_AMERICA.US7ASCII
7AL32UTF8AMERICAN_AMERICA.KO16KSC5601
8AL32UTF8AMERICAN_AMERICA.KO16MSWIN949
9AL32UTF8AMERICAN_AMERICA.AL32UTF8

Server Character Setを異なる方法でテストするために、Local PCに3つのOracleインスタンスを構成し、TNS名をそれぞれoraus7、oramswin949、orautfとして指定しました。

테스트 DB서버 (Local PC) 구성
テストDBサーバー(Local PC)の構成
  • 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
  • 実行結果
    • 「ハングル」:入力は成功、出力は失敗(疑問符(??)で出力)
    • 「シャット」:入力に失敗しました
Oracle Character Set 변환 Client 환경 구성 Case #1 실행결과
Oracle Character Set変換クライアント環境の構成Case #1の実行結果

3.1.2。 Case #2 (US7ASCII – KO16MSWIN949)

  • Server Character Set: US7ASCII (sqlplus -S leg/leg@us7ascii)
  • Client NLS_LANG: AMERICAN_AMERICA.KO16MSWIN949
  • 実行結果
    • 「ハングル」:入力は成功、出力は失敗(疑問符(??)で出力)
    • 「シャット」:入力は成功、出力は失敗(疑問符(?)で出力)
Case #2 실행결과
Case #2 実行結果

3.1.3。 Case #3 (US7ASCII – US7ASCII)

  • Server Character Set: US7ASCII (sqlplus -S leg/leg@us7ascii)
  • Client NLS_LANG: AMERICAN_AMERICA.US7ASCII
  • 実行結果
    • 「ハングル」:入力、出力の成功(誤って保存されている状態)
    • 「シャット」:入力、出力成功(誤って保存されている状態)
Case #3 실행결과
Case #3の実行結果

3.1.4。 Case #4 (KO16MSWIN949 – KO16KSC5601)

  • Server Character Set: KO16MSWIN949 (sqlplus -S leg/leg@oramswin949)
  • Client NLS_LANG: AMERICAN_AMERICA.KO16KSC5601
  • 実行結果
    • 「ハングル」:入力、出力成功
    • 「シャット」:入力に失敗しました
Case #4 실행결과
Case #4 実行結果

3.1.5。 Case #5 (KO16MSWIN949 – KO16MSWIN949)

  • Server Character Set: KO16MSWIN949 (sqlplus -S leg/leg@oramswin949)
  • Client NLS_LANG: AMERICAN_AMERICA.KO16MSWIN949
  • 実行結果
    • 「ハングル」:入力、出力成功
    • 「シャット」:入力、出力成功
Case #5 실행결과
Case #5 実行結果

3.1.6。 Case #6 (JA16MSWIN949 – US7ASCII)

  • Server Character Set: KO16MSWIN949 (sqlplus -S leg/leg@oramswin949)
  • Client NLS_LANG: AMERICAN_AMERICA.US7ASCII
  • 実行結果
    • 「ハングル」:入力は成功、出力は失敗(疑問符(????)で出力)
    • 「シャット」:入力は成功、出力は失敗(疑問符(??)で出力)
Case #6 실행결과
Case #6 実行結果

3.1.7。 Case #7 (AL32UTF8 – KO16KSC5601)

  • Server Character Set: AL32UTF8 (sqlplus -S leg/leg@orautf)
  • Client NLS_LANG: AMERICAN_AMERICA.KO16KSC5601
  • 実行結果
    • 「ハングル」:入力、出力成功
    • 「シャット」:入力に失敗しました
Case #7 실행결과
Case #7 実行結果

3.1.8。 Case #8 (AL32UTF8 – KO16MSWIN949)

  • Server Character Set: AL32UTF8 (sqlplus -S leg/leg@orautf)
  • Client NLS_LANG: AMERICAN_AMERICA.KO16MSWIN949
  • 実行結果
    • 「ハングル」:入力、出力成功
    • 「シャット」:入力、出力成功
Case #8 실행결과
Case #8 実行結果

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)すると、正常に入出力になることが確認できる。
Case #9-1 실행결과
Case #9-1 実行結果

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
  • 実行結果
    • 「ハングル」:入力、出力成功
    • 「シャット」:入力、出力成功
Case #9-2 실행결과
Case #9-2 実行結果

これまで、Oracle Character Set変換クライアント環境の構成とテストケース別の結果を見てきました。次の記事では、この結果をまとめて推奨構成について説明します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ja日本語