La variable NLS_LANG
Para el tratamiento correcto de las variaciones idiomáticas y similares, la BBDD Oracle utiliza la variable de entorno NLS_LANG
NLS_LANG tiene el formato: Lenguage_Pais.JuegodeCaracteres
El defecto es: NLS_LANG=American_america.US7ASCII
Obsérvese que el juego de caracteres por defecto es el US7ASCII y no es el más indicado para el español (de echo, el juego de caracteres US7ASCII solo es adecuado para el inglés)
No es obligatorio especificar los tres campos: No obstante, si un campo no se especifica, se deben especificar los separadores (_.)
NLS_LANG en Windows
Como siempre, Windows tiene sus propias reglas.
En Windows se puede especificar la variable NLS_LANG.
No obstante, lo más habitual es que esta variable esté definida a nivel del Registro de Windows. Puede verse como definir la variable NLS_LANG en windowa aqui: http://www.ora-600.es/node/154
Dependiendo de las versiones de Oracle instaladas, puede haber 1 o varias definiciones de NLS_LANG y puede estar en distintos sitios. Por ello, puede ser dificil saber cual es el valor NLS_LANG que se utiliza. Lo mejor (si es posible) es definir la variable de entorno NLS_LANG antes de llamar al programa que la requiere.
Utilidad del Juego de Caracteres de la variable NLS_LANG
A nivel de la aplicación cliente de Oracle, el campo Juego de Caracteres de la variable NLS_LANG indica el Juego de Caracteres a utilizar por este cliente Oracle.
Este valor es el que maneja la conversión automatica y transparente entre el programa cliente y la BBDD y viceversa.
Es de destacar que el Juego de Caracteres sólo se puede especificar mediante la variable NLS_LANG y antes de la conexión a la BBDD. En particular, no se pudede modificar con sentencias del tipo ALTER SESSION...
Conversiones que se realizan
Ya hemos visto que la BBDD tiene un Juego de Caracteres que se define en el momento de la creación de la misma y que debemos considerar que no se puede modificar. La BBDD considera que toda la información está guardada internamente en este Juego de Caracteres.
No obstante, cada cliente debe utilizar el Juego de Caracteres que le corresponde (véase el siguiente punto).
Las conversiones que se realizan son:
- En lectura (Select):
- Se convierten los datos del Juego de Caracteres de la BBDD al Juego de Caracteres definido para el cliente mediante la variable NLS_LANG
- En escritura (Insert, Update)
- Se convierten los datos del Juego de Caracteres definido para el cliente mediante la variable NLS_LANG al Juego de Caracteres de la BBDD
Hay una excepción a esta regla:
- Si el Juego de Caracteres de la BBDD y el definido para el cliente son el mismo, no se realizan conversiones
- Es una optimización.
