nls_language - Oracle Unicode Spooling
oracle nls_lang (2)
¿Cómo puedo transferir los datos de una tabla a un archivo que contiene caracteres Unicode?
Tengo un archivo sql que ejecuto desde la pantalla SQL * Plus y su contenido es:
SET ECHO OFF
SET FEEDBACK OFF
SET HEADING OFF
SET PAGESIZE 0
SPOOL STREET_POINT_THR.BQSV
SELECT GEOX||''`''||GEOY||''`''||UNICODE_DESC||''`''||ASCII_DESC
FROM GEO.STREET_POINTS;
SPOOL OFF
No creo que SQLPlus (al menos en Windows) sea compatible con Unicode. Acabo de probar aquí y parece que no funciona. No estoy seguro de si está bien mencionar esto aquí, pero mi propia herramienta, "Golden 6", admite spooling unicode, aunque solo es Windows. Tenga en cuenta que debe usar "SET ENCODING [UNICODE | UTF-8 | ANSI] [NOBOM]" antes del comando spool para elegir la codificación correcta.
Mark Ford
Software Benthic
www.benthicsoftware.com
Editar: Como Vincent señaló, está funcionando. Tenga en cuenta que el archivo UTF-8 creado no tiene BOM pero es un archivo UTF-8.
con la configuración correcta, su script funciona con SQL * Plus. Esto es lo que hice para probarlo:
- (obviamente) su base de datos debe ser compatible con Unicode. Use NVARCHAR2 si es necesario.
- Configure su aplicación cliente correctamente . asegúrese de que su variable NLS_LANG esté configurada correctamente, debe ser compatible con Unicode. Configuré el mío a
AMERICAN_ENGLISH.UTF8
. Mientras que la ventana DOS de SQL * Plus no mostrará todos los caracteres Unicode, se colocarán en la cola correctamente en el archivo. - (obviamente también) asegúrese de que la aplicación que lee el archivo en spool lo abre en el conjunto de caracteres correcto.
Ahora para el guión:
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
Esto insertará los caracteres rusos ЙЖ
SQL> SPOOL STREET_POINT_THR.BQSV
SQL> SELECT * FROM STREET_POINTS;
ðÖðû
SQL> SPOOL OFF
El archivo, abierto con un editor de texto (jEdit en mi caso) con el juego de caracteres correcto (UTF-8) muestra los caracteres correctamente.