Mit den richtigen Einstellungen funktioniert Ihr Skript mit SQL*Plus. Folgendes habe ich getan, um es zu testen:
- (offensichtlich) muss Ihre Datenbank Unicode unterstützen. Verwenden Sie bei Bedarf NVARCHAR2.
- Richten Sie Ihre Client-Anwendung korrekt ein. Stellen Sie sicher, dass Ihre NLS_LANG-Variable richtig eingestellt ist, sie muss Unicode unterstützen. Ich habe meine auf
AMERICAN_ENGLISH.UTF8
gesetzt . Während das DOS-Fenster von SQL*Plus nicht alle Unicode-Zeichen anzeigt, werden sie korrekt in die Datei gespoolt. - Stellen Sie (natürlich auch) sicher, dass die Anwendung, die die Spooldatei liest, sie im richtigen Zeichensatz öffnet.
Nun zum Skript:
SQL> select * from v$nls_parameters where parameter = 'NLS_CHARACTERSET';
PARAMETER VALUE
------------------ ------
NLS_CHARACTERSET UTF8
SQL> create table street_points (data varchar2(10));
Table created
SQL> INSERT INTO street_points VALUES (chr(53401)||chr(53398));
1 row inserted
Dadurch werden die russischen Zeichen ЙЖ
eingefügtSQL> SPOOL STREET_POINT_THR.BQSV
SQL> SELECT * FROM STREET_POINTS;
ðÖðû
SQL> SPOOL OFF
Die mit einem Texteditor (in meinem Fall jEdit) mit dem richtigen Zeichensatz (UTF-8) geöffnete Datei zeigt die Zeichen korrekt an.