使用Oracle字符集时经常出现的问题及对策

BlueskyWide 2003-07-05 08:21:44
使用Oracle字符集时经常出现的问题及对策

一、现象和由来
先说个有关Oracle的一个经典笑话:
几年前有一次,有位Oracle工程师在做语音查询时,用db_link做完连接查询调试通过后,即通知使用。吃完饭后,他做了个check,查询时惊讶地发现,所有字符全是“靠”,后立即与资深的Oracle系统工程师联系,立即改正了字符集,这才避免了一场纷争。
可见,不同字符集的乱码问题是十分常见和即需解决的问题,否则客户端的用户无法使用。
字符集乱码问题通常出现在:
1.新安装的不同版本客户端;
2.新安装的WEB服务器未经Oracle字符集配置,如用asp程序在任一台机中进行调用时;
3.导入新的数据库和用普通客户端导出数据库时。
现在我们不讨论字符集的种类,也不谈论字符集的的包含与子集关系,更不讨论多服务器不同字符集的乒乓开关的切换问题。仅讨论字符集不匹配时我们应该如何处理。

二、乱码问题出现时的解决之道
1.在sqlplus中,源(服务器)端和客户端(WEB服务器)的字符集查看方法是一致的,以DBA用户:
select * from sys.props$ where name='NLS_CHARACTERSET';
2.如果出现两端字符集不一致,即很容易在客户端出现乱码(客户端字符集不兼容或是小于关系),假如服务器端字符集为“US7ASCII”(全称为“AMERICAN_AMERICA.US7ASCII”),则修改客户端配置:
update sys.props$ set value$='AMERICAN_AMERICA.US7ASCII' where name='NLS_CHARACTERSET';

三、客户端在注册表中配置字符集的方法:
客户端的注册表HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE->HOME0中,如无系统变量NLS_LANG,则“新建”->“字符串”,重命名为“NLS_LANG”,赋值为:“AMERICAN_AMERICA.US7ASCII”。

四、注意问题
服务器端使用的字符集可在初始时update进行修改,也可以在init*.ora文件中定义,不再鳌述。
字符集一旦定义完成后,不要轻易修改,特别是服务器端。不适当的字符集可能使Oracle服务崩溃。



在此,仅以本人名义感谢必特-思维软件公司的同仁们。
...全文
36 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueskyWide 2003-07-07
  • 打赏
  • 举报
回复

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧