Conversión del juego de caracteres de Oracle (2): 3. Configuración del entorno del cliente (1)
Examine la configuración del entorno del cliente de conversión de Oracle Character Set. La configuración del conjunto de caracteres del servidor y NLS_LANG del cliente se puede dividir en 9 casos de prueba y los resultados de cada prueba se pueden verificar.
Esta es una continuación del artículo anterior.
3. Configuración del entorno del cliente de conversión de juegos de caracteres de Oracle
La variable de entorno para establecer el conjunto de caracteres en Oracle Client es NLS_LANG.
* Documentación de Oracle de referencia: Elección de una configuración regional con la variable de entorno NLS_LANG (oracle.com)
Comúnmente, se piensa que el Cliente NLS_LANG debe coincidir con el Juego de Caracteres del Servidor, pero esto no es obligatorio. El conjunto de caracteres del servidor es una configuración para "almacenar" datos de cadenas de caracteres, y Client NLS_LANG es una configuración para "mostrar" y "enviar" datos de cadenas de caracteres.
En otras palabras, si el conjunto de caracteres del servidor está configurado incorrectamente, los datos de la cadena se almacenan incorrectamente y si el NLS_LANG del cliente está configurado incorrectamente, los datos de la cadena se muestran y transmiten incorrectamente.
Defina el caso del conjunto de caracteres del servidor y la configuración NLS_LANG del cliente de la siguiente manera y observe el resultado de la prueba.
Caso # | Conjunto de caracteres del servidor | Cliente NLS_LANG |
1 | US7ASCII | AMERICAN_AMERICA.KO16KSC5601 |
2 | US7ASCII | AMERICAN_AMERICA.KO16MSWIN949 |
3 | US7ASCII | AMERICAN_AMERICA.US7ASCII |
4 | KO16MSWIN949 | AMERICAN_AMERICA.KO16KSC5601 |
5 | KO16MSWIN949 | AMERICAN_AMERICA.KO16MSWIN949 |
6 | KO16MSWIN949 | AMERICAN_AMERICA.US7ASCII |
7 | AL32UTF8 | AMERICAN_AMERICA.KO16KSC5601 |
8 | AL32UTF8 | AMERICAN_AMERICA.KO16MSWIN949 |
9 | AL32UTF8 | AMERICAN_AMERICA.AL32UTF8 |
Para probar el conjunto de caracteres del servidor de manera diferente, se configuraron tres instancias de Oracle en la PC local y los nombres de TNS se designaron como oraus7, oramswin949, orautf, respectivamente.
- oraus7: US7ASCII
- oramswin949: KO16MSWIN949
- orautf: AL32UTF8
Se seleccionaron dos valores de entrada para cada caso de prueba: "Hangul" y "Sharp".
"Hangul" es para verificar si es posible la entrada/salida general de coreano, y "sharp" es para verificar la entrada/salida de caracteres no admitidos por KSC5601.
El script de prueba (ejemplo) y la explicación son los siguientes.
-- Windows command prompt 환경 title Test Case (1) US7ASCII, AMERICAN_AMERICA.KO16KSC5601 set NLS_LANG=AMERICAN_AMERICA.KO16KSC5601 sqlplus -S leg/leg@oraus7 -- sqlplus 환경 TRUNCATE TABLE Z_TEST; INSERT INTO Z_TEST(VAL) VALUES('한글'); INSERT INTO Z_TEST(VAL) VALUES('샾'); COMMIT; SELECT VAL, DUMP(VAL, 1016) DP FROM Z_TEST; EXIT;
- Línea 2: Establezca el título de la ventana del símbolo del sistema para una fácil identificación (diferente para cada caso de prueba, consulte a continuación)
- Línea 3: Establecer NLS_LANG (diferente para cada caso de prueba, ver más abajo)
- Línea 4: Ejecute y conéctese a sqlplus (Configure de manera diferente para cada caso de prueba. Consulte a continuación)
- Línea 7: Trunca la tabla de prueba (Z_TEST)
- Línea 8: Ingrese el valor "Hangul"
- Línea 9: Ingrese el valor "agudo"
- Línea 10: Ejecutar COMMIT
- Línea 11: Salida de los valores de entrada y el resultado de la función DUMP
- Nota: Si configura el segundo parámetro de la función DUMP en 1016, puede verificar la longitud del valor almacenado (número de bytes), el juego de caracteres y el valor hexadecimal de cada byte.
- Línea 12: final
3.1. Resultados por caso de prueba
3.1.1. Caso #1 (US7ASCII – KO16KSC5601)
- Conjunto de caracteres del servidor: US7ASCII (sqlplus -S leg/leg@us7ascii)
- Cliente NLS_LANG: AMERICAN_AMERICA.KO16KSC5601
- resultado de ejecución
- 'Hangul': entrada exitosa, salida fallida (salida como un signo de interrogación (??))
- 'sharp': error de entrada
![Oracle Character Set 변환 Client 환경 구성 Case #1 실행결과](https://prodskill.com/wp-content/uploads/2022/10/image-72.png)
3.1.2. Caso #2 (US7ASCII – KO16MSWIN949)
- Conjunto de caracteres del servidor: US7ASCII (sqlplus -S leg/leg@us7ascii)
- Cliente NLS_LANG: AMERICAN_AMERICA.KO16MSWIN949
- resultado de ejecución
- 'Hangul': entrada exitosa, salida fallida (salida como un signo de interrogación (??))
- 'Sharp': la entrada tiene éxito, la salida falla (las salidas como un signo de interrogación (?))
3.1.3. Caso #3 (US7ASCII – US7ASCII)
- Conjunto de caracteres del servidor: US7ASCII (sqlplus -S leg/leg@us7ascii)
- Cliente NLS_LANG: AMERICAN_AMERICA.US7ASCII
- resultado de ejecución
- 'Hangul': Entrada y salida exitosa (se almacena incorrectamente)
- 'Sharp': entrada y salida exitosa (se almacena incorrectamente)
3.1.4. Caja #4 (KO16MSWIN949 – KO16KSC5601)
- Conjunto de caracteres del servidor: KO16MSWIN949 (sqlplus -S leg/leg@oramswin949)
- Cliente NLS_LANG: AMERICAN_AMERICA.KO16KSC5601
- resultado de ejecución
- 'Hangul': entrada, salida exitosa
- 'sharp': error de entrada
3.1.5. Caja #5 (KO16MSWIN949 – KO16MSWIN949)
- Conjunto de caracteres del servidor: KO16MSWIN949 (sqlplus -S leg/leg@oramswin949)
- Cliente NLS_LANG: AMERICAN_AMERICA.KO16MSWIN949
- resultado de ejecución
- 'Hangul': entrada, salida exitosa
- 'sharp': entrada, salida exitosa
3.1.6. Caso #6 (KO16MSWIN949 – US7ASCII)
- Conjunto de caracteres del servidor: KO16MSWIN949 (sqlplus -S leg/leg@oramswin949)
- Cliente NLS_LANG: AMERICAN_AMERICA.US7ASCII
- resultado de ejecución
- 'Hangul': entrada exitosa, salida fallida (salida como un signo de interrogación (????))
- 'sharp': entrada exitosa, salida fallida (salida como un signo de interrogación (??))
3.1.7. Caja #7 (AL32UTF8 – KO16KSC5601)
- Conjunto de caracteres del servidor: AL32UTF8 (sqlplus -S leg/leg@orauf)
- Cliente NLS_LANG: AMERICAN_AMERICA.KO16KSC5601
- resultado de ejecución
- 'Hangul': entrada, salida exitosa
- 'sharp': error de entrada
3.1.8. Caja #8 (AL32UTF8 – KO16MSWIN949)
- Conjunto de caracteres del servidor: AL32UTF8 (sqlplus -S leg/leg@orauf)
- Cliente NLS_LANG: AMERICAN_AMERICA.KO16MSWIN949
- resultado de ejecución
- 'Hangul': entrada, salida exitosa
- 'sharp': entrada, salida exitosa
3.1.9. Caso #9-1 (AL32UTF8 – AL32UTF8)
- Conjunto de caracteres del servidor: AL32UTF8 (sqlplus -S leg/leg@orauf)
- Cliente NLS_LANG: AMERICAN_AMERICA.AL32UTF8
- resultado de ejecución
- 'Hangul': entrada, salida exitosa
- 'Tienda': error de entrada: la página de códigos predeterminada del símbolo del sistema de Windows (cmd.exe) es 949 (ANSI) y no es compatible con la entrada/salida UTF-8, por lo que no se ejecuta con normalidad. Si lo ejecuta con PowerShell compatible con entrada/salida UTF-8 (Caso #9-2), puede ver que la entrada/salida funciona normalmente.
3.1.10. Caso #9-2 (AL32UTF8 – AL32UTF8) – Compatibilidad con UTF-8 que se ejecuta con PowerShell
- Conjunto de caracteres del servidor: AL32UTF8 (sqlplus -S leg/leg@orauf)
- Cliente NLS_LANG: AMERICAN_AMERICA.AL32UTF8
- resultado de ejecución
- 'Hangul': entrada, salida exitosa
- 'sharp': entrada, salida exitosa
Hasta este momento, hemos analizado la configuración del entorno del cliente de conversión de Oracle Character Set y los resultados de cada caso de prueba. En el próximo artículo, resumiremos estos resultados y veremos la configuración recomendada.