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-Zeichensatz | Client NLS_LANG |
1 | US7ASCII | AMERIKAnisch_AMERIKA.KO16KSC5601 |
2 | US7ASCII | AMERIKAnisch_AMERIKA.KO16MSWIN949 |
3 | US7ASCII | AMERIKAnisch_AMERIKA.US7ASCII |
4 | KO16MSWIN949 | AMERIKAnisch_AMERIKA.KO16KSC5601 |
5 | KO16MSWIN949 | AMERIKAnisch_AMERIKA.KO16MSWIN949 |
6 | KO16MSWIN949 | AMERIKAnisch_AMERIKA.US7ASCII |
7 | AL32UTF8 | AMERIKAnisch_AMERIKA.KO16KSC5601 |
8 | AL32UTF8 | AMERIKAnisch_AMERIKA.KO16MSWIN949 |
9 | AL32UTF8 | AMERIKAnisch_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.
- 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
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 (?))
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)
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
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
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 (??))
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
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
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.
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
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.