martes, 22 de julio de 2008

Character Set en SqlPlus de Windows en Español

Hasta que no empecé este blog, nunca me había preocupado por tener el characterset correcto en mi sesión de sqlplus en DOS.


SQL> commit;

Confirmaci¾n terminada.


El caracter ¾ debería en realidad ser "ó". lo primero que intenté fue cambiar el characterset a lo que generalmente pudiera usar en un sistema linux.


C:\oracle\product\10.2.0\BIN>set NLS_LANG=SPANISH_AMERICA.WE8ISO8859P1

SQL> commit;

Confirmaci¾n terminada.

C:\oracle\product\10.2.0\BIN>set NLS_LANG=SPANISH_AMERICA.UTF8

SQL> commit;

Confirmaci├│n terminada.


Como nada de esto funcionó, lo primero fue averiguar lo que realmente estaba usando como characterset:


C:\oracle\product\10.2.0\database>echo %NLS_LANG%
%NLS_LANG%

SQL> @.[%NLS_LANG%].
SP2-0310: no se ha podido abrir el archivo ".[SPANISH_SPAIN.WE8MSWIN1252]..sql"


La línea de comando en windows (DOS) no usa los códigos de página Western European, por lo cual debemos de obtener el código que se usa realmente.

Para eso windows tiene la utilería chcp


C:\oracle\product\10.2.0\BIN>chcp
Tabla de códigos activa: 850



Con esta información, podemos buscar el characterset correcto en la siguiente lista:


MS-DOS code page Oracle Client character set (3rd part of NLS_LANG)
437 US8PC437
737 EL8PC737
850 WE8PC850
852 EE8PC852
857 TR8PC857
858 WE8PC858
861 IS8PC861
862 IW8PC1507
865 N8PC865
866 RU8PC866

C:\oracle\product\10.2.0\BIN>set NLS_LANG=SPANISH_AMERICA.WE8PC850

SQL> commit;

Confirmación terminada.

3 comentarios:

Anónimo dijo...

El CodePage 850 estaba en las versiones viejitas de MS-DOS, a mi se me hace curioso observar que, aun cuando es el mismo ambiente, el emulador de la linea de comandos utiliza por default el CP850 mientras que Windows utiliza la codificación Windows European (WINDOWS-1252) que curiosamente es igual que la codificación "estándard" de Java

Hugo E. Contreras Gamiño dijo...

Efectivamente, windows maneja las dos codificaciones, por esta razón oracle usa en el registro de windows la entrada para el código correcto de SBCS que para nuestro caso es el Latin 1 y que se usa para sqlplusw y muchas otras aplicaciones. Pero para la consola de DOS, pareceiera que el código "OEM" 850 ha sido mantenido desde tiempos de la arquitectura original de PC de IBM. No sé si en recientes versiones de windows ya se soporte UTF-8 en ventanas de comando, sin embargo creo que por compatibilidad se seguirá usando el código OEM.

Geost dijo...

Amigo, respecto a tu solución.. hay forma d hacerla permanente.. me refiero que a cada vez que se finaliza y se vuelve a iniciar hay que volver a hacer los mismo...