问题描述
嗨,大师们,
我的Pro * C应用程序有问题。
我的操作系统-> RedHat版本5.5 (Tikanga)
我的数据库;
甲骨文数据库11g企业版11.2.0.3.0-64bit生产
PL/SQL版本11.2.0.3.0-生产
核心11.2.0.3.0
生产
TNS for Linux: Version 11.2.0.3.0 - 生产
NLSRTL Version 11.2.0.3.0 - 生产
Nls _ 参数;
Nls _ 语言AMERICAN
Nls _ 领土AMERICA
Nls _ 货币 $
Nls_iso _ 货币美国
NLS_NUMERIC_CHARACTERS。,
Nls _ 日历格里高利
日期格式DD-MON-RR
美国语言
Nls_characterrsetWE8ISO8859P9
Nls _ 排序二进制
时间格式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_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP二进制
Nls_length _ 语义字节
Nls_nchar_conv_exp假
在我运行我的C应用程序之前,我设置NLS_LANG。例如;
出口NLS_LANG = 美国 _ 美国.Utf8
我在unix终端上运行appl->
以user: mus/mus123 @ orcl的身份连接到甲骨文
卸载 “从must_test_char中选择 *”
数组大小 = 10
IDD,文本
"1" |"(null)"
如果我导出NLS_LANG = 美国 _ 美国.We8iso8859p9
我跑了
以user: mus/mus123 @ orcl的身份连接到甲骨文
卸载 “从must_test_char中选择 *”
数组大小 = 10
IDD,文本
"1" |"▒aaaa▒aaaaa▒aaaaa▒aaaaa▒aaaaa▒aaaaa▒aaaa▒aaa"
提取1行
如果我取消设置NLS_LANG -> 取消设置NLS_LANG
我跑了->
以user: mus/mus123 @ orcl的身份连接到甲骨文
卸载 “从must_test_char中选择 *”
数组大小 = 10
IDD,文本
"1" |"Saaaa?aaaaaUaaaaaOaaaaaCaaaaa?aaaaa?aaaaoaaa"
提取1行
我在数据库中的原始数据如下;
1个
你能帮我解决这个问题吗?
编辑:
我尝试了我的应用程序另一个数据库。这是NLS设置,美国 _ 美国
我在我的客户端NLS_LANG = AMERICAN_AMERICA.UTF8上设置
然后我在那台机器上运行我的应用程序,我得到正确的值 ..
1个
谢谢。
我的Pro * C应用程序有问题。
我的操作系统-> RedHat版本5.5 (Tikanga)
我的数据库;
甲骨文数据库11g企业版11.2.0.3.0-64bit生产
PL/SQL版本11.2.0.3.0-生产
核心11.2.0.3.0
生产
TNS for Linux: Version 11.2.0.3.0 - 生产
NLSRTL Version 11.2.0.3.0 - 生产
Nls _ 参数;
Nls _ 语言AMERICAN
Nls _ 领土AMERICA
Nls _ 货币 $
Nls_iso _ 货币美国
NLS_NUMERIC_CHARACTERS。,
Nls _ 日历格里高利
日期格式DD-MON-RR
美国语言
Nls_characterrsetWE8ISO8859P9
Nls _ 排序二进制
时间格式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_NCHAR_CHARACTERSET AL16UTF16
NLS_COMP二进制
Nls_length _ 语义字节
Nls_nchar_conv_exp假
在我运行我的C应用程序之前,我设置NLS_LANG。例如;
出口NLS_LANG = 美国 _ 美国.Utf8
我在unix终端上运行appl->
./app sqlstmt"select * from mus_test_char"复制
以user: mus/mus123 @ orcl的身份连接到甲骨文
卸载 “从must_test_char中选择 *”
数组大小 = 10
IDD,文本
"1" |"(null)"
如果我导出NLS_LANG = 美国 _ 美国.We8iso8859p9
我跑了
./app sqlstmt"select * from mus_test_char"复制
以user: mus/mus123 @ orcl的身份连接到甲骨文
卸载 “从must_test_char中选择 *”
数组大小 = 10
IDD,文本
"1" |"▒aaaa▒aaaaa▒aaaaa▒aaaaa▒aaaaa▒aaaaa▒aaaa▒aaa"
提取1行
如果我取消设置NLS_LANG -> 取消设置NLS_LANG
我跑了->
./app sqlstmt"select * from mus_test_char"复制
以user: mus/mus123 @ orcl的身份连接到甲骨文
卸载 “从must_test_char中选择 *”
数组大小 = 10
IDD,文本
"1" |"Saaaa?aaaaaUaaaaaOaaaaaCaaaaa?aaaaa?aaaaoaaa"
提取1行
我在数据库中的原始数据如下;
1个
你能帮我解决这个问题吗?
编辑:
我尝试了我的应用程序另一个数据库。这是NLS设置,美国 _ 美国
我在我的客户端NLS_LANG = AMERICAN_AMERICA.UTF8上设置
然后我在那台机器上运行我的应用程序,我得到正确的值 ..
1个
谢谢。
专家解答
当您在Unix终端或此类终端的PC仿真器上运行Pro * C应用程序时,必须确保NLS_LANG的字符集与配置终端/仿真器的字符编码相对应。终端和仿真器太多了,我无法告诉如何直接检查此配置。但是,您可以尝试类似的方法:
$ od -t x1 复制
这将显示类似的内容:
0000000 c5 9e 0a 0000003复制
如果您看到 'c5 9e 0a',那么您的终端配置为utf-8,NLS_LANG应该是。AL32UTF8。如果你看到 'de 0a',那么你的终端配置为iso8859-9,NLS_LANG应该是WE8ISO8859P9
无论如何,如果您的数据库字符集NLS_CHARACTERSET是AL32UTF8,并且您选择您的列值为
SELECT DUMP(text,1016) FROM mus_test_char复制
那么你应该在列值中看到对应于 'ş '的 'c5,9e'。如果你的数据库字符集NLS_CHARACTERSET是WE8ISO8859P9,那么你应该看到 'de'。如果您看到其他代码,那么仍然存在配置问题。所谓的直通配置 (NLS_LANG = NLS_CHARACTERSET) 有时可以通过正确显示字符来欺骗人们,而实际上它们在数据库中编码不正确。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
676次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
634次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
541次阅读
2025-04-20 10:07:02
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
490次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
485次阅读
2025-04-22 00:20:37
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
467次阅读
2025-04-22 00:13:51
一页概览:Oracle GoldenGate
甲骨文云技术
465次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
413次阅读
2025-04-17 09:30:30
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
371次阅读
2025-04-15 14:48:05
OR+DBLINK的关联SQL优化思路
布衣
352次阅读
2025-05-05 19:28:36