怎样传入Oracle8存储过程中文参数才不乱码?(100分)

  • 主题发起人 主题发起人 FlyNoLimit
  • 开始时间 开始时间
F

FlyNoLimit

Unregistered / Unconfirmed
GUEST, unregistred user!
我在Delphi6中用BDE面板中的StoredProc控件调用Oracle8中的存储过程,其中
的参数需要使用中文,但是在Oracle端是乱码,如何设置才能避免这种错误? 
 
我也遇到了同样的问题,在前台通过存储过程写入的中文信息在数据库里全是乱码,而且
我在pl sql中写入的中文数据在delphi中显示时也是乱码,我怀疑是字符集的问题,但我的
oracle 9i在安装时选择的就是中文字符集,在 worksheet中显示都是正确的,而且同一
台机子上的delphi+sql server 7.0完全正常。
好不容易搜索到了这样主题的帖子,进来后却发现没有人解答,在此我赞助100分,希望
有经验的朋友能伸出援手,谢谢!
 
在datebase 建立连接后在一个query中执行以下sql:
ALTER SESSION SET NLS_LANG='SIMPLIFIEDCHINESE_CHINA.WE8ISO8859P1'试试
还有就是检查一下software/oracle注册表里面的NLS_LANG是不是这个值
问题在于服务器端的字符集与客户不一致,服务器端字符集这么看:
select * from NLS_DATABASE_PARAMETERS
然后把其中的值 "NLS_LANGUAGE"_"NLS_TERRITORY"."NLS_NCHAR_CHARACTERSET"与本机
注册表比较一下(引号内替换为显示的值),如果注册表不对,就改过来就可以了,
alter session一般不需要自己执行的。我以前是服务器端和客户端都用
AMERICAN_AMERICA.US7ASCII(因为服务器端是unix默认的),支持汉字没有问题。客户端安装后要改一下注册表中的
NLS_LANG。问题一定在这。
 
http://otn.oracle.com/products/oracle8i/htdocs/faq_combined.htm
 
qdyoung:
我在前端通过DataSet(Query和Table)传中文没有问题,只是通过存储过程的
参数传递时才出现上述问题,比如我有一存储过程SP_TEMP(str VARCHAR2),
如果str传入的是中文,就会乱码。
 
检查了注册表吗,服务器数据库和客户端字符集匹配吗
 
FlyNoLimit:我的问题已经解决了,只需要将BDE中的LANGDRIVER的值设为空就OK了,
不知对你是否有帮助。
 
marshal,我用你的方法,问题解决了,但你知道是什么原因吗?
 
什么原因我也不知道,我也是在‘问专家’网上看到的这个答案,这个问题把我也折腾
的够戗。希望后来看到这个帖子的人能给说出原因,说出正确原因者我将把我承诺的100分
赞助给他。
 
后退
顶部