Cómo configurar correctamente las configuraciones regionales de Informix GLS y CSDK
Los caracteres son un término general para varios caracteres y símbolos, incluidos caracteres nacionales, signos de puntuación, símbolos gráficos, números, etc. Un conjunto de caracteres es una colección de caracteres. Un juego de caracteres es una colección de caracteres. Hay muchos tipos de juegos de caracteres. Cada juego de caracteres contiene una cantidad diferente de caracteres. Los juegos de caracteres comunes tienen los siguientes nombres: juego de caracteres ASCII, juego de caracteres GB2312 (chino simplificado), juego de caracteres BIG5. (chino tradicional), juego de caracteres GB18030 (juego de caracteres asiáticos), juego de caracteres Unicode (UTF-8), etc. ) juego de caracteres, etc.
La configuración regional de Informix GLS gestiona la denominación y la codificación interna (utilizando codificación hexadecimal) de conjuntos de caracteres comunes. Puede ver una tabla de nombres y codificaciones de caracteres GLS en el archivo del lado del servidor: $InformixDIR/gls/cm3/registry. Los ejemplos son los siguientes:
Nombre del conjunto de caracteres codificación codificación hexadecimal
8859-1 819 # 0x0333
GB 57357 # 0xe00d
GB2312 -80 57357 # 0xe00d
utf8 57372 # 0xe01c
big5 57352 # 0xe008
GB18030-2000 5488 # 0x1570
Entorno GLS allí Pueden ser nombres de juegos de caracteres diferentes, pero corresponden a la misma codificación de juego de caracteres. Sin embargo, un juego de caracteres solo puede tener una codificación, lo que significa que la codificación del juego de caracteres es única.
GLS
Los juegos de caracteres admitidos se agrupan por idioma y el idioma local en el entorno. Por ejemplo, el directorio en China continental es: $InformixDIR/gls/lc11/zh_cn/ En este directorio se encuentran los dos archivos siguientes: 1570.lco e00d.lco
, lo que significa que al configurar el archivo. conjunto de caracteres, podemos GB18030-2000 zh_cn.gb zh_cn.GB2312-80
, lo que significa que podemos usar tres nombres diferentes al configurar el conjunto de caracteres. Aquí (zh_cn.gb y zh_cn.GB2312-80 corresponden al mismo conjunto de caracteres).
GLS
Los diferentes conjuntos de caracteres del entorno se convierten correctamente. Para ver cuáles se convierten correctamente, consulte el directorio $InformixDIR/gls/cv9 para ver si hay archivos
que se puedan convertir hacia y desde los conjuntos de caracteres especificados. Por ejemplo, los archivos e01ce00d.cvo y e00de01c.cvo en este directorio indican que GLS
admite la conversión de caracteres UTF-8 a GB a través de estos dos archivos de transformación.
Informix establece la configuración de soporte de localización de idioma para la base de datos a través de DB_LOCALE y CLIENT_LOCALE. Estos dos archivos se componen de cuatro partes (la cuarta parte es opcional) y no distinguen entre mayúsculas y minúsculas.
1 2 3 4
lt; Idioma > _lt; País > lt; Nombre del juego de caracteres/Codificación del juego de caracteres > [@modifier]
Ejemplo:
CLIENT_LOCALE=en_us.8859-1
CLIENT_LOCALE=en_us.819
# Los dos conjuntos de caracteres anteriores son iguales: 819 representa la codificación 8859-1
DB_LOCALE=zh_cn.gb
Volver arriba
Cómo funciona el juego de caracteres GLS
Base de datos Informix del lado del servidor y del lado del cliente conjuntos de caracteres El principio de funcionamiento se muestra en la Figura 1. p>
Uso de la variable de entorno DB_LOCALE
Cuando una aplicación cliente y el servidor de base de datos intercambian datos de caracteres, si el valor de la variable de entorno DB_LOCALE (en la computadora cliente) es diferente Si el valor de CLIENT_LOCALE es diferente, la aplicación cliente realizará la conversión del conjunto de códigos. La conversión de conjuntos de códigos evita la corrupción de datos cuando los dos conjuntos de códigos son diferentes.
Cuando un programa cliente solicita una conexión, envía un mensaje que contiene DB_LOCALE (si está configurado) al servidor de la base de datos.
El servidor de la base de datos utiliza DB_LOCALE para determinar cómo configurar el servidor para manejar la información de la base de datos para una configuración regional.
Cuando una aplicación cliente intenta abrir una base de datos, el servidor de la base de datos compara el valor de la variable de entorno DB_LOCALE pasada por la aplicación cliente con la configuración regional de la base de datos almacenada en la base de datos.
Cuando el servidor de la base de datos accede a una columna de un tipo de datos asociado con el idioma local, el servidor de la base de datos utiliza el idioma local especificado por DB_LOCALE.
Cuando el servidor de la base de datos crea una nueva base de datos, verifica la configuración regional de la base de datos (DB_LOCALE) para determinar cómo almacenar la información de caracteres en el catálogo del sistema de la base de datos. Esta información incluye cosas como cómo manejar expresiones regulares, comparar cadenas y garantizar que los conjuntos de códigos se utilicen correctamente.
Uso de la variable de entorno CLIENT_LOCALE
Cuando una aplicación cliente y el servidor de base de datos intercambian datos de caracteres, si el conjunto de códigos de la variable de entorno CLIENT_LOCALE es el mismo que el conjunto de códigos de DB_LOCALE (en la computadora cliente) Si el conjunto es diferente, la aplicación cliente realizará la conversión del conjunto de códigos. La conversión de conjuntos de códigos evita la corrupción de datos cuando los dos conjuntos de códigos son diferentes.
Cuando el programa cliente solicita una conexión, enviará información que incluye CLIENT_LOCALE al servidor de la base de datos.
El servidor de la base de datos utiliza CLIENT_LOCALE al decidir cómo configurar el servidor para manejar información sobre la configuración regional de las aplicaciones cliente.
Cuando el preprocesador Informix ESQL/C procesa un archivo fuente, acepta el código fuente C escrito en el conjunto de códigos CLIENT_LOCALE. Durante
la ejecución de la aplicación cliente Informix ESQL/C, CLIENT_LOCALE
comprueba el nombre de la configuración regional del cliente, lo que afecta los nombres de archivos del sistema operativo, el contenido de los archivos de texto y las fechas, el formato de hora y datos numéricos.
Cuando una utilidad de base de datos crea un archivo, el nombre del archivo y su contenido estarán en el conjunto de códigos especificado por CLIENT_LOCALE. Al buscar archivos de información específicos de un producto, las aplicaciones cliente comprueban el directorio de información asociado con la configuración regional del cliente.
El significado de las cuatro configuraciones regionales
Configuración regional del cliente - configuración regional del cliente
La configuración regional del cliente especifica la aplicación cliente que se utilizará para realizar la lectura El idioma, la configuración regional y conjunto de códigos para operaciones de escritura (E/S). En una aplicación cliente, las operaciones de E/S incluyen la lectura de entradas del teclado o archivos de datos que se enviarán a la base de datos y la escritura de los datos que el servidor de la base de datos obtiene de la base de datos en la pantalla, el archivo o la impresora. La configuración regional del cliente está configurada con CLIENT_LOCALE
.
Configuración regional de la base de datos - Configuración regional de la base de datos
La configuración regional de la base de datos se establece a través de la variable de entorno DB_LOCALE, que especifica el servidor de la base de datos que se utilizará para interpretar correctamente los tipos de datos dependientes de la configuración regional en una base de datos específica ( NCHAR y
NVARCHAR) idioma, configuración regional y conjunto de códigos. El conjunto de códigos especificado en DB_LOCALE determina qué caracteres son válidos en cualquier columna de caracteres y determina los nombres de los objetos de la base de datos, como bases de datos, tablas, columnas y vistas. El servidor de la base de datos transfiere datos hacia y desde la base de datos utilizando el conjunto de códigos de base de datos especificados por la variable de entorno DB_LOCALE
.
Entorno local del servidor - Servidor local
El servidor de la base de datos escribe archivos (como archivos de depuración y advertencia) utilizando el conjunto de códigos del servidor especificado por la variable de entorno SERVER_LOCALE. Sin embargo, el servidor de la base de datos no utiliza la configuración regional del servidor al escribir archivos (archivos de bases de datos y de tablas) que utilizan el formato específico de Informix.
Lenguaje de procesamiento del servidor - Lenguaje de procesamiento del servidor
El servidor de la base de datos utiliza el conjunto de códigos del lenguaje de la base de datos como el conjunto de códigos del lenguaje de procesamiento del servidor y utiliza el lenguaje de procesamiento del servidor para escribir. Informix
Archivos en formatos específicos (archivos de bases de datos y tablas). Es decir, el servidor de la base de datos escribe archivos (archivos de bases de datos y de tablas) en un formato específico de Informix utilizando la configuración regional de la base de datos (DB_LOCALE).
El proceso de establecer una conexión a la base de datos
Cuando una aplicación cliente solicita una conexión a la base de datos, el servidor de la base de datos realiza los siguientes pasos utilizando la configuración regional GLS.
La aplicación cliente envía información local al servidor de la base de datos.
CLIENT_LOCALE (si no se configura, se utilizará el valor predeterminado en_us.819);
DB_LOCALE (si no se configura, no se envía).
Verifique que se pueda establecer una conexión entre la aplicación cliente y su base de datos solicitada.
Compare las dos configuraciones regionales siguientes:
Si coinciden, se establece la conexión.
Si no hay coincidencia se mostrará un mensaje indicando que no se puede establecer la conexión con la base de datos. También puede continuar con dicha conexión, pero es posible que el servidor de la base de datos no pueda interpretar correctamente los datos recibidos del cliente, dejándolo solo para comprender el formato de los datos en el intercambio.
El idioma local especificado por DB_LOCALE enviado por la aplicación cliente;
El idioma local de la base de datos almacenado en el catálogo del sistema de la base de datos solicitante.
Determine la configuración regional de procesamiento del servidor en el siguiente orden:
Utilice el DB_LOCALE definido por el cliente
La variable de entorno DB_LOCALE en la configuración regional de la base de datos.
Realizar la conversión de conjuntos de códigos
En un entorno cliente/servidor, si la computadora cliente o servidor utiliza diferentes conjuntos de códigos para representar los mismos caracteres, debe convertir los datos de caracteres de uno Convierta un conjunto de códigos en otro conjunto de códigos. Sin conversión de conjuntos de códigos, una computadora no puede procesar ni mostrar correctamente datos de caracteres de otra computadora (cuando las dos computadoras usan conjuntos de códigos diferentes).
Cuándo realizar la conversión del conjunto de códigos
Una aplicación solo debe realizar la traducción del conjunto de códigos si los dos conjuntos de códigos (localidad de procesamiento del cliente y servidor, o localidad de procesamiento del servidor y servidor) son diferentes. Utilice la conversión de conjuntos de códigos. Las siguientes son posibles razones por las que los conjuntos de códigos difieren:
Diferentes sistemas operativos pueden codificar el mismo carácter de manera diferente.
Si la configuración regional del cliente y la configuración regional de la base de datos especifican diferentes conjuntos de códigos, la aplicación cliente realizará una conversión del conjunto de códigos para que la computadora servidor no esté cargada con este tipo de procesamiento.
Si la configuración regional del servidor y la configuración regional de procesamiento del servidor especifican conjuntos de códigos diferentes, el servidor de la base de datos realiza la conversión del conjunto de códigos al escribir y leer archivos del sistema operativo (como archivos de registro). Esta conversión no involucra datos de la base de datos.
En la Figura 1, los puntos negros representan dos momentos en un entorno cliente/servidor cuando pueden ocurrir conversiones de conjuntos de códigos.
Conversión del conjunto de códigos de la aplicación cliente
Cuando se cumplen las dos condiciones siguientes, la aplicación cliente realizará automáticamente la conversión del conjunto de códigos entre el cliente y los conjuntos de códigos de la base de datos:
Los conjuntos de códigos de las configuraciones regionales del cliente y de la base de datos no coinciden.
Existe una conversión de conjunto de códigos de destino válida para la conversión entre conjuntos de códigos de cliente y de base de datos.
Cuando una aplicación cliente comienza a ejecutarse, compara los nombres de las configuraciones regionales del cliente y de la base de datos
para determinar si se debe realizar una conversión de conjunto de códigos. Si se configuran las variables de entorno CLIENT_LOCALE y DB_LOCALE
, las aplicaciones cliente utilizarán estos nombres locales para determinar los conjuntos de códigos del cliente y de la base de datos, respectivamente. Si CLIENT_LOCALE no está configurado (ni
DBNLS está configurado), la aplicación cliente asume que la configuración regional del cliente es la configuración regional predeterminada. Si DB_LOCALE no está configurado (y
DBNLS no está configurado), la aplicación cliente asume que la configuración regional de la base de datos es la misma que la del cliente (el valor de la configuración CLIENT_LOCALE).
Si los conjuntos de códigos del cliente y de la base de datos son los mismos, no se requiere conversión del conjunto de códigos. Sin embargo, si los conjuntos de códigos no coinciden, la aplicación cliente debe determinar si los dos conjuntos de códigos se pueden convertir. Dos conjuntos de códigos son convertibles si el cliente puede encontrar los archivos de conversión de conjuntos de códigos relevantes. Estos archivos de transformación de conjuntos de códigos deben existir en la computadora cliente.
Ejemplo:
Aplicación cliente: CLIENT_LOCALE=en_us.1252 DB_LOCALE=en_us.8859-1
La aplicación cliente determina que también debe utilizar la página de códigos de Windows 1252 (en la configuración regional del cliente) y
conjunto de códigos ISO8859-1 (en la configuración regional de la base de datos).
Si se vincula a una base de datos con la configuración regional GB (zh_cn.gb), la base de datos establecerá una advertencia SQLWARN debido a los diferentes idiomas, localización y conjuntos de códigos
. Las aplicaciones cliente realizarán incorrectamente conversiones de conjuntos de códigos.
Continuará realizando conversiones entre la página de códigos de Windows 1252 e ISO8859-1
en lugar de conversiones entre la página de códigos de Windows 1252 y zh_cn.gb. Esta situación puede causar corrupción de datos. La aplicación ya no utilizará este enlace.
Volver al principio
Establecer juego de caracteres
Informix establece la configuración de soporte de localización de idioma para la base de datos a través de DB_LOCALE y CLIENT_LOCALE.
Lado del servidor de base de datos
Cuando crea una base de datos (y cuando crea una instancia de base de datos para unificar los juegos de caracteres del sistema y las bases de datos de la aplicación), siga estos pasos para configurar DB_LOCALE valor para la base de datos.
1. Establezca la variable de entorno DB_LOCALE
set DB_LOCALE=zh_cn.gb
2. Cree la base de datos cree la base de datos dbname
3 Verificar el conjunto de caracteres de la base de datos actual
SELECCIONE dbs_collate FROM sysmaster: sysdbslocale
WHERE dbs_dbsname = ' dbname '
Cliente
Cuándo usamos. ODBC, al conectarnos a la base de datos a través de JDBC, debemos configurar correctamente las variables locales en la información de conexión. Necesitamos configurar la variable de idioma correcta:
Establecer variable de idioma
DB_LOCALE=zh_cn.gb
CLIENT_LOCALE=zh_cn.gb
ODBC:
La siguiente figura muestra el diagrama de configuración regional de ODBC en el entorno WINDOWS.
Figura 2. Configuración de la configuración regional en ODBC
El entorno Unix debe definirse en el archivo odbc.ini:
Defina los dos elementos siguientes en el archivo odbc.ini. Archivo odbc.ini Variables de entorno del idioma de la base de datos
DB_LOCALE=zh_cn.gb
CLIENT_LOCALE=zh_cn.gb
ODBC.LOCALE=zh_cn.gb
JDBC:
Al conectarnos a la base de datos usando JDBC, necesitamos configurar las variables locales de la base de datos DB_LOCALE y CLIENT_LOCALE en la URL que conecta a la base de datos. Un ejemplo es el siguiente:
String url = "jdbc.Informix-sqli://10.127.1.11:8001/testdb:
InformixSERVER=nombredelservidor;usuario=usuario;contraseña= contraseña;
DB_LOCALE=zh_CN.gb; CLIENT_LOCALE=zh_CN.gb";
Volver al principio
Problemas comunes de configuración del juego de caracteres
En la configuración y en el proceso de uso del juego de caracteres de la base de datos Informix, a menudo encontramos algunos errores relacionados con el juego de caracteres. Conociendo la causa del error, es fácil resolver el problema. A continuación resumimos varios problemas comunes relacionados con la configuración del juego de caracteres.
Error -23101 No se pueden cargar las categorías locales
Este error ocurre si los siguientes archivos correspondientes a los juegos de caracteres DB_LOCALE y CLIENT_LOCALE no existen.
- $InformixDIR/gls/lc11/DB_LOCALE's( idioma _ región )/(codificación hexadecimal para db).lco
- $InformixDIR/gls/lc11/CLIENT_LOCALE's( idioma _ región )/(codificación hexadecimal para db).lco
- $InformixDIR/gls/lc11/CLIENT_LOCALE's( idioma _ región )/(codificación hexadecimal del cliente). lco
Ejemplo:
DB_LOCALE = en_us.utf8 # (codificación hexadecimal correspondiente: e01c)
CLIENT_LOCALE = en_us.utf8 # (la codificación hexadecimal correspondiente es : 1570)
Deben existir los siguientes 3 archivos; si falta alguno, se producirá el error -23101.
- $InformixDIR/gls/lc11/ en_us/e01c.utf8 # (La codificación hexadecimal correspondiente es: e01c)
Deben existir los siguientes 3 archivos: en_us/e01c .lco
- $InformixDIR/gls/lc11/zh_cn/e01c.lco
- $InformixDIR/gls/lc11/zh_cn/1570.lco
Error -23104 Error abriendo el archivo de objeto de conversión de conjunto de códigos requerido
Este error ocurre cuando los siguientes archivos de conversión correspondientes a los conjuntos de caracteres DB_LOCALE y CLIENT_LOCALE no existen. Por supuesto, la conversión solo es necesaria si los juegos de caracteres de DB_LOCALE y CLIENT_LOCALE no coinciden; si coinciden, no se producirá el error -23104.
- $InformixDIR/gls/cv9/ccccdddd.cvo
- $InformixDIR/gls/cv9/ddddcccc.cvo
Donde: cccc es el mismo carácter as CLIENT_LOCALE El valor hexadecimal correspondiente a la codificación del conjunto
dddd es el valor hexadecimal correspondiente a la codificación del conjunto de caracteres DB_LOCALE
Ejemplo
DB_LOCALE = en_us .utf8 # (El código hexadecimal correspondiente es e01c)
CLIENT_LOCALE = en_cn.gb18030-2000 # (El código hexadecimal correspondiente es e01c)
CLIENT_LOCALE = en_cn .utf8 # (El código hexadecimal correspondiente es e01c)
CLIENT_LOCALE = en_us.utf8 # (El código hexadecimal correspondiente es e01c) Error -201, -202 Error de sintaxis de mensajes de base de datos p>
Error -201, -202 Error de sintaxis de mensajes de base de datos p>
Error -201, -202 Error de sintaxis de mensajes de base de datos , no admite nombres de objetos chinos, como nombres de tablas chinos, alias de campos y nombres de vistas. El motivo de estos mensajes de error es la configuración DB_LOCALE de la base de datos actual.
Si DB_LOCALE de la base de datos está configurado en zh_cn.GB18030-2000, la base de datos puede admitir nombres de objetos chinos.
Ejemplo:
La base de datos con DB_LOCALE = zh_cn.GB18030-2000 puede admitir los siguientes nombres de objetos chinos; de lo contrario, se generará un error de sintaxis.
Seleccione la primera columna c1 de test_cn;
Crear tabla Nombre de tabla chino (entero c1, nombre de columna chino entero
nombre de tabla chino <); /p>
Si no se ejecuta SQL similar, verifique el valor DB_LOCALE de la base de datos. Valor LOCAL.
SELECCIONE dbs_collate FROM sysmaster: sysdbslocale WHERE dbs_dbsname = ' dbname '
Problema de error
Informix
Los caracteres están confusos o los caracteres chinos no se pueden mostrar correctamente. El problema se produce porque el valor de la configuración CLIENT_LOCALE del cliente no coincide con el valor DB_LOCALE
y la conversión entre los dos juegos de caracteres correspondientes no se realiza correctamente. Debe restablecer los valores CLIENT_LOCALE y DB_LOCALE
para asegurarse de que sean iguales o se conviertan correctamente entre sí.
Problemas con el formato de hora
El formato de hora de la base de datos Informix está controlado por la variable de entorno del lado del servidor de la base de datos GL_DATE GL_DATETIME. El formato de hora predeterminado bajo el juego de caracteres predeterminado es:
p>
GL_DATE ="m/d/iy"
DATETIME="iY-m-d H:M:S"
Sin embargo, cuando configuramos DB_LOCALE en
zh_cn .gb, y GL_DATE, DATETIME no está configurado, entonces el formato de hora usará el valor de CLIENT_LOCALE y, en el caso de
zh_cn.gb, el formato de hora usará el valor de CLIENT_LOCALE.
En el caso de zh_cn.gb, el formato de hora será "2 de octubre de 2009
formato de fecha", que aparecerá si utilizamos el formato de hora predeterminado en el sistema anterior. Error de discrepancia en el formato de hora. Si aún necesitamos usar el formato de hora predeterminado, debemos cambiar la variable de entorno del formato de hora en el servidor de la base de datos
GL_DATE="m/d/iy"
DATETIME=" iY-m-d H: M: S"
Volver arriba
Requisitos de la versión de GLS CSDK
En CSDK 2.8 y superior (la última versión es CSDK 3.5) , las configuraciones regionales de Informix GLS requieren que la configuración regional del servidor de bases de datos y la configuración regional del cliente estén configuradas correctamente para que el procesamiento de texto y lenguaje se admita correctamente. En la configuración regional china, debemos configurar la configuración regional del lado del servidor y del lado del cliente de la siguiente manera.
Lado del servidor de base de datos:
Al crear una base de datos (para unificar los juegos de caracteres de la base de datos del sistema y la base de datos de la aplicación, al crear una instancia de base de datos), establezca el valor DB_LOCALE de la base de datos de la siguiente manera.
1. Establezca la variable de entorno DB_LOCALE
set DB_LOCALE=zh_cn.GB18030-2000
2. Cree la base de datos crear base de datos dbname
3 .Verifique el juego de caracteres actual de la base de datos
SELECCIONE dbs_collate FROM sysmaster: sysdbslocale
WHERE dbs_dbsname = ' dbname '
Cliente:
Cuando nos conectamos a la base de datos usando ODBC o JDBC, necesitamos configurar correctamente las variables locales: DB_LOCALE y CLIENT_LOCALE en la información de conexión.
Establecer variables de entorno de idioma
DB_LOCALE=zh_cn.GB18030-2000
CLIENT_LOCALE=zh_cn.GB18030-2000
Configuración de variables de entorno de idioma
En la versión CSDK2.7, IDS utiliza los modos de entrada y salida de basura de forma predeterminada para procesar caracteres chinos. Si DB_LOCALE en el servidor de la base de datos usa el valor predeterminado en_us.8859-1
En este caso, se recomienda cambiar el juego de caracteres de la base de datos (establezca DB_LOCALE=zh_cn.GB18030-2000 y vuelva a crear la base de datos) y luego siga las instrucciones para DB_LOCALE y el método de configuración
CLIENT_LOCALE para manejar. Si el costo de reconstruir la base de datos en un entorno real es demasiado alto, puede considerar los siguientes pasos para resolver el problema del soporte ODBC para chino. /en_us/0333.lco .Para JDBC, podemos usar NEWCODESET para resolver el problema:
URLString = "jdbc:Informix-sqli://9.125.66.130:6346/dbname:InformixSERVER=servername;
NEWCODESET=GB18030-2000, 8859-1, 819;
CLIENT_LOCALE=en_US.8859-1; DB_LOCALE=en_US.8859-1;"