lunes, 30 de enero de 2012

Revisando el set de caracteres de la base de datos

Si quieres exportar una base de datos Oracle para importar los datos en otra base de datos (imp/exp), o quieres crear una base de datos Oracle similar a otra base de datos, entonces tienes que poner atención al set de caracteres de la base de datos y a la variable de ambiente NLS_LANG. Si no lo haces, en caso de importar/exportar podrías terminar con datos diferentes de la base de datos origen, y en el caso de creación de una base de datos tu aplicación podría no almacenar los datos como se espera, y ambos problemas son difíciles de detectar y resolver. Por lo tanto, gasta un minuto revisando el NLS_CHARACTERSET en la base de datos origen y configurando la variable de ambiente NLS_LANG al momento de importar o crear la base de datos, y no tendrás que reexportar o recrear una base de datos por problemas de set de caracteres.

Para revisar el NLS_CHARACTERSET y todos los parámetros de localización de tu base de datos origen, puedes revisar la tabla NLS_DATABASE_PARAMETERS:

SQL> select * from NLS_DATABASE_PARAMETERS;

PARAMETER VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET WE8ISO8859P1
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT dd-mon-yyyy
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 10.2.0.1.0

20 rows selected.

Teniendo los valores de los parámetros NLS_LANGUAGE, NLS_TERRITORY y NLS_CHARACTERSET puedes configurar la variable de ambiente NLS_LANG, o puedes sólo configurarla en la base de datos destino de la misma manera que la base de datos origen siempre y cuando el valor de la variable NLS_LANG corresponda con los parámetros NLS de la base de datos:

oracle@myserver:~$ export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1

Y si estás creando una base de datos, no olvides declarar el set de caracteres apropiadamente:

CREATE DATABASE mydb
...
CHARACTER SET WE8ISO8859P1
...

Más información:

Oracle Database Globalization Support Guide

No hay comentarios.:

Publicar un comentario