Oracle-Zeichensatzkonvertierung (2): 3. Konfigurieren der Client-Umgebung (1)

Untersuchen Sie die Umgebungskonfiguration des Oracle-Zeichensatzkonvertierungsclients. Die Server-Zeichensatz- und Client-NLS_LANG-Einstellungen können in 9 Testfälle unterteilt werden und die Ergebnisse jedes Tests können überprüft werden.

Dies ist eine Fortsetzung des vorherigen Artikels.

Oracle-Zeichensatzkonvertierung(1): 1. Notwendigkeit, korrekter Oracle-Zeichensatz-Setup-Leitfaden

3. Konfiguration der Clientumgebung für die Oracle-Zeichensatzkonvertierung

Die Umgebungsvariable zum Festlegen des Zeichensatzes in Oracle Client ist NLS_LANG.

* Verweis auf die Oracle-Dokumentation: Auswählen eines Gebietsschemas mit der Umgebungsvariablen NLS_LANG (oracle.com)

Im Allgemeinen wird angenommen, dass der Client NLS_LANG mit dem Zeichensatz des Servers übereinstimmen muss, dies ist jedoch nicht zwingend erforderlich. Der Server-Zeichensatz ist eine Einstellung zum „Speichern“ von Zeichenkettendaten, und der Client-NLS_LANG ist eine Einstellung zum „Anzeigen“ und „Senden“ von Zeichenkettendaten.

Mit anderen Worten, wenn der Server-Zeichensatz falsch eingestellt ist, werden Zeichenfolgendaten falsch gespeichert, und wenn Client NLS_LANG falsch eingestellt ist, werden Zeichenfolgendaten falsch angezeigt und falsch übertragen.

Definieren Sie den Fall der Server-Zeichensatz- und Client-NLS_LANG-Einstellungen wie folgt und sehen Sie sich die Testergebnisse an.

Fall #Server-ZeichensatzClient NLS_LANG
1US7ASCIIAMERIKAnisch_AMERIKA.KO16KSC5601
2US7ASCIIAMERIKAnisch_AMERIKA.KO16MSWIN949
3US7ASCIIAMERIKAnisch_AMERIKA.US7ASCII
4KO16MSWIN949AMERIKAnisch_AMERIKA.KO16KSC5601
5KO16MSWIN949AMERIKAnisch_AMERIKA.KO16MSWIN949
6KO16MSWIN949AMERIKAnisch_AMERIKA.US7ASCII
7AL32UTF8AMERIKAnisch_AMERIKA.KO16KSC5601
8AL32UTF8AMERIKAnisch_AMERIKA.KO16MSWIN949
9AL32UTF8AMERIKAnisch_AMERIKA.AL32UTF8

Um den Server-Zeichensatz anders zu testen, wurden drei Oracle-Instanzen auf dem lokalen PC konfiguriert und die TNS-Namen mit oraus7, oramswin949 bzw. orautf bezeichnet.

테스트 DB서버 (Local PC) 구성
Konfiguration des Test-DB-Servers (Lokaler PC)
  • oraus7: US7ASCII
  • oramswin949: KO16MSWIN949
  • orautf: AL32UTF8

Für jeden Testfall wurden zwei Eingabewerte ausgewählt: „Hangul“ und „Sharp“.

„Hangul“ prüft, ob allgemeine koreanische Eingabe/Ausgabe möglich ist, und „sharp“ prüft die Eingabe/Ausgabe von Zeichen, die nicht vom KSC5601 unterstützt werden.

Das Testskript (Beispiel) und die Erklärung lauten wie folgt.

-- 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;
  • Zeile 2: Legen Sie den Titel des Eingabeaufforderungsfensters zur einfachen Identifizierung fest (für jeden Testfall unterschiedlich, siehe unten)
  • Zeile 3: Setze NLS_LANG (je nach Testfall unterschiedlich, s.u.)
  • Zeile 4: Ausführen und Verbindung zu sqlplus (Für jeden Testfall unterschiedlich einrichten. Siehe unten)
  • Zeile 7: Kürze die Testtabelle (Z_TEST)
  • Zeile 8: Geben Sie den Wert „Hangul“ ein
  • Zeile 9: Geben Sie den „scharfen“ Wert ein
  • Zeile 10: Führen Sie COMMIT aus
  • Zeile 11: Ausgabe der Eingabewerte und des Ergebnisses der DUMP-Funktion
    • Hinweis: Wenn Sie den zweiten Parameter der DUMP-Funktion auf 1016 setzen, können Sie die Länge des gespeicherten Werts (Anzahl der Bytes), den Zeichensatz und den Hexadezimalwert jedes Bytes überprüfen.
  • Zeile 12: Ende

3.1. Ergebnisse nach Testfall

3.1.1. Fall #1 (US7ASCII – KO16KSC5601)

  • Serverzeichensatz: US7ASCII (sqlplus -S leg/leg@us7ascii)
  • Client NLS_LANG: AMERICAN_AMERICA.KO16KSC5601
  • Ausführungsergebnis
    • 'Hangul': Eingabe erfolgreich, Ausgabe fehlgeschlagen (Ausgabe als Fragezeichen (??))
    • 'sharp': Eingabe fehlgeschlagen
Oracle Character Set 변환 Client 환경 구성 Case #1 실행결과
Konfigurationsfall #1 der Clientumgebung für die Oracle-Zeichensatzkonvertierung Ausführungsergebnis

3.1.2. Gehäuse #2 (US7ASCII – KO16MSWIN949)

  • Serverzeichensatz: US7ASCII (sqlplus -S leg/leg@us7ascii)
  • Client NLS_LANG: AMERICAN_AMERICA.KO16MSWIN949
  • Ausführungsergebnis
    • 'Hangul': Eingabe erfolgreich, Ausgabe fehlgeschlagen (Ausgabe als Fragezeichen (??))
    • 'Sharp': Eingabe erfolgreich, Ausgabe fehlgeschlagen (Ausgabe als Fragezeichen (?))
Case #2 실행결과
Fall #2 Ausführungsergebnis

3.1.3. Gehäuse #3 (US7ASCII – US7ASCII)

  • Serverzeichensatz: US7ASCII (sqlplus -S leg/leg@us7ascii)
  • Client NLS_LANG: AMERICAN_AMERICA.US7ASCII
  • Ausführungsergebnis
    • 'Hangul': Erfolgreiche Ein- und Ausgabe (wird falsch gespeichert)
    • 'Sharp': Erfolgreiche Ein- und Ausgabe (es wird falsch gespeichert)
Case #3 실행결과
Fall #3 Ausführungsergebnis

3.1.4. Gehäuse #4 (KO16MSWIN949 – KO16KSC5601)

  • Serverzeichensatz: KO16MSWIN949 (sqlplus -S leg/leg@oramswin949)
  • Client NLS_LANG: AMERICAN_AMERICA.KO16KSC5601
  • Ausführungsergebnis
    • 'Hangul': Eingabe, Ausgabe erfolgreich
    • 'sharp': Eingabe fehlgeschlagen
Case #4 실행결과
Fall #4 Ausführungsergebnis

3.1.5. Gehäuse #5 (KO16MSWIN949 – KO16MSWIN949)

  • Serverzeichensatz: KO16MSWIN949 (sqlplus -S leg/leg@oramswin949)
  • Client NLS_LANG: AMERICAN_AMERICA.KO16MSWIN949
  • Ausführungsergebnis
    • 'Hangul': Eingabe, Ausgabe erfolgreich
    • 'scharf': Eingabe, Ausgabe erfolgreich
Case #5 실행결과
Fall #5 Ausführungsergebnis

3.1.6. Gehäuse #6 (KO16MSWIN949 – US7ASCII)

  • Serverzeichensatz: KO16MSWIN949 (sqlplus -S leg/leg@oramswin949)
  • Client NLS_LANG: AMERICAN_AMERICA.US7ASCII
  • Ausführungsergebnis
    • 'Hangul': Eingabe erfolgreich, Ausgabe fehlgeschlagen (Ausgabe als Fragezeichen (????))
    • 'sharp': Eingabe erfolgreich, Ausgabe fehlgeschlagen (Ausgabe als Fragezeichen (??))
Case #6 실행결과
Fall #6 Ausführungsergebnis

3.1.7. Gehäuse #7 (AL32UTF8 – KO16KSC5601)

  • Serverzeichensatz: AL32UTF8 (sqlplus -S leg/leg@orautf)
  • Client NLS_LANG: AMERICAN_AMERICA.KO16KSC5601
  • Ausführungsergebnis
    • 'Hangul': Eingabe, Ausgabe erfolgreich
    • 'sharp': Eingabe fehlgeschlagen
Case #7 실행결과
Fall #7 Ausführungsergebnis

3.1.8. Gehäuse #8 (AL32UTF8 – KO16MSWIN949)

  • Serverzeichensatz: AL32UTF8 (sqlplus -S leg/leg@orautf)
  • Client NLS_LANG: AMERICAN_AMERICA.KO16MSWIN949
  • Ausführungsergebnis
    • 'Hangul': Eingabe, Ausgabe erfolgreich
    • 'scharf': Eingabe, Ausgabe erfolgreich
Case #8 실행결과
Fall #8 Ausführungsergebnis

3.1.9. Gehäuse #9-1 (AL32UTF8 – AL32UTF8)

  • Serverzeichensatz: AL32UTF8 (sqlplus -S leg/leg@orautf)
  • Client NLS_LANG: AMERICAN_AMERICA.AL32UTF8
  • Ausführungsergebnis
    • 'Hangul': Eingabe, Ausgabe erfolgreich
    • 'Shop': Eingabefehler: Die Standardcodepage der Windows-Eingabeaufforderung (cmd.exe) ist 949 (ANSI) und unterstützt keine UTF-8-Eingabe/Ausgabe, sodass sie nicht normal ausgeführt wird. Wenn Sie es mit PowerShell ausführen, das UTF-8-Eingabe/Ausgabe unterstützt (Fall #9-2), können Sie sehen, dass die Eingabe/Ausgabe normal funktioniert.
Case #9-1 실행결과
Fall #9-1 Ausführungsergebnis

3.1.10. Fall #9-2 (AL32UTF8 – AL32UTF8) – UTF-8-Unterstützung, die mit PowerShell ausgeführt wird

  • Serverzeichensatz: AL32UTF8 (sqlplus -S leg/leg@orautf)
  • Client NLS_LANG: AMERICAN_AMERICA.AL32UTF8
  • Ausführungsergebnis
    • 'Hangul': Eingabe, Ausgabe erfolgreich
    • 'scharf': Eingabe, Ausgabe erfolgreich
Case #9-2 실행결과
Fall #9-2 Ausführungsergebnis

Bis zu diesem Punkt haben wir uns die Konfiguration der Clientumgebung für die Oracle-Zeichensatzkonvertierung und die Ergebnisse der einzelnen Testfälle angesehen. Im nächsten Artikel fassen wir diese Ergebnisse zusammen und betrachten die empfohlene Konfiguration.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

de_DEDeutsch