Oracle字符集转换(二):3.配置客户端环境(一)

我们来看一下Oracle字符集转换客户端环境的配置。您可以将服务器字符集和客户端 NLS_LANG 设置分为 9 个测试用例,并检查每个测试用例的测试结果。

这是上一篇文章的延续。

Oracle字符集转换(一):1.必要性,正确的Oracle字符集设置指南

三、Oracle字符集转换客户端环境配置

Oracle客户端设置字符集的环境变量为NLS_LANG。

* 参考甲骨文文档: 使用 NLS_LANG 环境变量选择区域设置 (oracle.com)

通常,认为客户端 NLS_LANG 必须与服务器的字符集匹配,但这不是强制性的。服务器字符集是“保存”字符串数据的设置,客户端NLS_LANG是“显示”和“传输”字符串数据的设置。

也就是说,如果服务器字符集设置错误,就会导致字符串数据存储错误,如果客户端NLS_LANG设置错误,就会导致字符串数据显示错误、传输错误。

我们将服务器字符集和客户端NLS_LANG设置的情况定义如下,并查看测试结果。

案例#服务器字符集客户端 NLS_LANG
1US7ASCII美国_美国.KO16KSC5601
2US7ASCIIAMERICAN_AMERICA.KO16MSWIN949
3US7ASCIIAMERICAN_AMERICA.US7ASCII
4KO16MSWIN949美国_美国.KO16KSC5601
5KO16MSWIN949AMERICAN_AMERICA.KO16MSWIN949
6KO16MSWIN949AMERICAN_AMERICA.US7ASCII
7AL32UTF8美国_美国.KO16KSC5601
8AL32UTF8AMERICAN_AMERICA.KO16MSWIN949
9AL32UTF8AMERICAN_AMERICA.AL32UTF8

为了测试不同的服务器字符集,在本地PC上配置了3个Oracle实例,TNS名称分别指定为oraus7、oramswin949和orautf。

테스트 DB서버 (Local PC) 구성
测试DB服务器(本地PC)配置
  • oraus7:US7ASCII
  • oramswin949: KO16MSWIN949
  • orautf:AL32UTF8

每个测试用例选择了两个输入值:“Hangul”和“Sharp”。

“Hangul”旨在检查是否可以进行常规朝鲜文输入和输出,“Sharp”旨在检查 KSC5601 不支持的字符的输入和输出。

测试脚本(示例)及说明如下。

-- 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;
  • 第2行:设置命令提示符窗口的标题,以便于识别(每个测试用例设置不同,见下文)
  • 第 3 行:NLS_LANG 设置(针对每个测试用例设置不同,见下文)
  • 第 4 行:执行并连接到 sqlplus(每个测试用例设置不同。见下文)
  • 第 7 行:截断测试表 (Z_TEST)
  • 第 8 行:输入值“Hangul”
  • 第 9 行:输入“Sharp”值
  • 第 10 行:运行 COMMIT
  • 第11行:输出输入值和DUMP函数的结果。
    • 注意:如果将DUMP函数的第二个参数设置为1016,则可以检查存储值的长度(字节数)、字符集以及每个字节的十六进制表达值。
  • 第 12 行:结束

3.1。测试用例的结果

3.1.1.案例 #1 (US7ASCII – KO16KSC5601)

  • 服务器字符集:US7ASCII (sqlplus -Sleg/leg@us7ascii)
  • 客户端 NLS_LANG:AMERICAN_AMERICA.KO16KSC5601
  • 执行结果
    • 'Hangul':输入成功,输出失败(输出为问号(??))
    • “尖锐”:输入失败
Oracle Character Set 변환 Client 환경 구성 Case #1 실행결과
Oracle字符集转换客户端环境配置案例#1执行结果

3.1.2.案例 #2 (US7ASCII – KO16MSWIN949)

  • 服务器字符集:US7ASCII (sqlplus -Sleg/leg@us7ascii)
  • 客户端 NLS_LANG:AMERICAN_AMERICA.KO16MSWIN949
  • 执行结果
    • 'Hangul':输入成功,输出失败(输出为问号(??))
    • ‘Sharp’:输入成功,输出失败(输出为问号(?))
Case #2 실행결과
案例#2执行结果

3.1.3.案例 #3 (US7ASCII – US7ASCII)

  • 服务器字符集:US7ASCII (sqlplus -Sleg/leg@us7ascii)
  • 客户端 NLS_LANG:AMERICAN_AMERICA.US7ASCII
  • 执行结果
    • 'Hangul':输入、输出成功(存储错误)
    • ‘Shop’:输入、输出成功(存储错误)
Case #3 실행결과
案例#3执行结果

3.1.4.案例 #4 (KO16MSWIN949 – KO16KSC5601)

  • 服务器字符集:KO16MSWIN949 (sqlplus -Sleg/leg@oramswin949)
  • 客户端 NLS_LANG:AMERICAN_AMERICA.KO16KSC5601
  • 执行结果
    • 'Hangul':输入、输出成功
    • “尖锐”:输入失败
Case #4 실행결과
案例#4执行结果

3.1.5。案例 #5 (KO16MSWIN949 – KO16MSWIN949)

  • 服务器字符集:KO16MSWIN949 (sqlplus -Sleg/leg@oramswin949)
  • 客户端 NLS_LANG:AMERICAN_AMERICA.KO16MSWIN949
  • 执行结果
    • 'Hangul':输入、输出成功
    • 'Shop':输入、输出成功
Case #5 실행결과
案例#5执行结果

3.1.6。案例 #6 (KO16MSWIN949 – US7ASCII)

  • 服务器字符集:KO16MSWIN949 (sqlplus -Sleg/leg@oramswin949)
  • 客户端 NLS_LANG:AMERICAN_AMERICA.US7ASCII
  • 执行结果
    • 'Hangul':输入成功,输出失败(输出为问号(???))
    • ‘Shop’:输入成功,输出失败(输出为问号(??))
Case #6 실행결과
案例#6执行结果

3.1.7.外壳 #7 (AL32UTF8 – KO16KSC5601)

  • 服务器字符集:AL32UTF8(sqlplus -Sleg/leg@orautf)
  • 客户端 NLS_LANG:AMERICAN_AMERICA.KO16KSC5601
  • 执行结果
    • 'Hangul':输入、输出成功
    • “尖锐”:输入失败
Case #7 실행결과
案例#7执行结果

3.1.8.案例 #8 (AL32UTF8 – KO16MSWIN949)

  • 服务器字符集:AL32UTF8(sqlplus -Sleg/leg@orautf)
  • 客户端 NLS_LANG:AMERICAN_AMERICA.KO16MSWIN949
  • 执行结果
    • 'Hangul':输入、输出成功
    • 'Shop':输入、输出成功
Case #8 실행결과
案例#8执行结果

3.1.9.案例 #9-1 (AL32UTF8 – AL32UTF8)

  • 服务器字符集:AL32UTF8(sqlplus -Sleg/leg@orautf)
  • 客户端 NLS_LANG:AMERICAN_AMERICA.AL32UTF8
  • 执行结果
    • 'Hangul':输入、输出成功
    • ‘Shop’:输入失败:Windows命令提示符(cmd.exe)的默认代码页是949(ANSI),并且不支持UTF-8输入/输出,因此无法正常运行。如果使用支持UTF-8输入输出的PowerShell(案例#9-2)运行,可以确认输入输出正常。
Case #9-1 실행결과
案例#9-1执行结果

3.1.10.案例 #9-2 (AL32UTF8 – AL32UTF8) – 使用支持 UTF-8 的 PowerShell 运行

  • 服务器字符集:AL32UTF8(sqlplus -Sleg/leg@orautf)
  • 客户端 NLS_LANG:AMERICAN_AMERICA.AL32UTF8
  • 执行结果
    • 'Hangul':输入、输出成功
    • 'Shop':输入、输出成功
Case #9-2 실행결과
案例#9-2执行结果

到目前为止,我们已经了解了 Oracle 字符集转换客户端环境的配置以及每个测试用例的结果。在下一篇文章中,我们将总结这些结果并查看推荐的配置。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

zh_CN简体中文