急!!!oracle字符集问题

linchk 2009-02-08 11:32:53
本人在linux服务器上装了oracle9i,接下来想编译php5 --with-oci8=oracle home 支持连接oracle,可一直没能编译成功,后来下载一个10g的客户端,放到服务器/usr/local/10gclient下,再编译php5 --with-oci8=客户端路径,再运行phpinfo.php,显示成功了,我把在本地测试无问题的程序放到服务器上,并在服务器上建了数据库,用pl/sql工具连接数据库,直接在表里输入中文数据,一切正常,不会出现乱码,可当运行程序查询出来的中文数据全部变成问号,用程序插入中文数据再查询出来也都是问号。
经测试,发现系统环境、php、apache都没问题,所以我猜测是服务器上的那个10g客户端字符集有问题,到网络上查了些资料,可怎么搞都不行,希望哪位高手能帮忙看下
...全文
87 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
mikespook 2009-02-09
参数没错~把你的 oci 连接那部分代码发出来看看吧~~~

另外,你的乱码的字段类型是 NCHAR 还是 CHAR?
回复
linchk 2009-02-09
NLS_CHARACTERSET : ZHS16CGB231280
回复
linchk 2009-02-09
查询出来显示:
NLS_LANGUAGE : AMERICAN

NLS_DATE_LANGUAGE : AMERICAN

NLS_NCHAR_CHARACTERSET : UTF8

不知道大哥还要看什么参数
回复
mikespook 2009-02-09
你在 PL/SQL中用这个查询一下,oracle 的 NLS 参数的值是不是正确。
另外,修改 bash 的环境文件的话,你要看看你的 oracle 所在用户的 shell 是不是 bash。如果是默认用 sh,你改 bash 的也没用。

select * from nls_database_parameters;
回复
mikespook 2009-02-09
[Quote=引用 10 楼 linchk 的回复:]
$a=oci_connect($this->C_user,$this->C_passwd,"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$this->IP)(PORT=1521))(CONNECT_DATA=(SID=$this->C_db)))");

$b=OCIParse($a,'select name from user');
OCIExecute($b);

[/Quote]

oci_connect 的第四个参数是设置 charset 的,这个在 oracle 9.2 和以上版本中有用。你设置一下这个参数在试试~~
回复
yeah920 2009-02-09
没搞过,帮顶
回复
linchk 2009-02-09
$a=oci_connect($this->C_user,$this->C_passwd,"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=$this->IP)(PORT=1521))(CONNECT_DATA=(SID=$this->C_db)))");

$b=OCIParse($a,'select name from user');
OCIExecute($b);
回复
linchk 2009-02-09
字段类型是varchar2

回复
linchk 2009-02-08
我在bash_profile有设置export NLS_LANG=AMERICAN.ZHS16CGB231280
还是不行
回复
linchk 2009-02-08
我在bash_profile有设置export NLS_LANG=AMERICAN.ZHS16CGB231280
还是不行
回复
mikespook 2009-02-08
oracle 客户端字符集通过 NLS_LANG 环境变量设置~~~
http://www.itpub.net/thread-1074129-1-1.html
回复
linchk 2009-02-08
还有哪个大哥大姐碰过这种问题
回复
相关推荐
发帖
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
帖子事件
创建了帖子
2009-02-08 11:32
社区公告
暂无公告