从Oracle数据库中读取数据

标题: [求助]从Oracle数据库中读取数据 [打印本页]


作者: eric 标题:[求助]从Oracle数据库中读取数据 时间: 2003-06-01 00:13
通过PHP连接Oracle数据库:
  putenv("NLS_LANG=AMERICAN_TAIWAN.ZHT16BIG5");
  $handle=ora_plogon($oracleUser."@".$oracleDatabase, $oraclePassword);
  $cursor = ora_open($handle);
  $query = "SELECT cname FROM des_spec where mfg_no='$final_project_name'";
  ora_parse($cursor, $query) or die;
  ora_exec($cursor);
  ...
在繁体环境下运行,从繁体的Oracle数据库中取出的数据变为鬼符,无法正常显示。
我查过资料,需要设置环境变量,我已经设置:putenv("NLS_LANG=AMERICAN_TAIWAN.ZHT16BIG5");但还是没有解决。哪位高手...


作者: eric 标题:终于解决了,原来是... 时间: 2003-06-18 16:55
经过无数次的测试,今天终于解决了,原来是INTRALINK惹的祸。
以下是我测试过的几种比较典型的方法:

第一种:
测试环境:繁体Windows2000, INTRALINK FileServer, INTRALINK DataServer
INTRALINK DataServer的NLS_LANG设置为:AMERICAN_AMERICA.UTF8;
在INTRALINK自带的Oracle数据库上创建一个数据库用户Test;
测试步骤:
1)打开一个命令行窗口;
2)设置NLS_LANG环境变量:set NLS_LANG=AMERICAN_AMERICA.UTF8;
3)登录到Oracle数据库:sqlplus test/test;
4)查询:select customer from mfg;
5)测试test_ora.php程序;
结果:在命令行窗口无法正常显示繁体中文字符;
不管如何改变php文件中的NLS_LANG设置,在浏览器中运行test_ora.php均无法正常显示繁体中文。

第二种:
测试环境:同第一种;
测试步骤:
1)打开一个命令行窗口;
2)设置NLS_LANG环境变量:set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1(INTRALINK Client的缺省设置);
3)登录到Oracle数据库:sqlplus test/test;
4)查询:select customer from mfg;
结果:在命令行窗口正常显示繁体中文字符;

第三种:
测试环境:同第一种;
测试步骤:使用Toad工具,登录到Oracle数据库:test/test,查询mfg表内容;
结果:在Toad工具中可以正常显示繁体中文字符;

第四种:
测试环境:繁体Windows2000, Oracle 8.1.7 Server, Oracle Client;
Oracle Server 的NLS_LANG设置为:AMERICAN_AMERICA.ZHT16BIG5;
创建数据库用户Test;
测试步骤:
1)打开一个命令行窗口;
2)设置NLS_LANG环境变量:set NLS_LANG=AMERICAN_AMERICA.ZHT16BIG5;
3)登录到Oracle数据库:sqlplus test/test;
4)查询:select customer from mfg;
5)测试test_ora.php程序(NLS_LANG设置为AMERICAN_AMERICA.ZHT16BIG5);
结果:在命令行窗口正常显示繁体中文字符;在浏览器中运行test_ora.php也能正常显示繁体中文。

第五种:
测试环境:
服务端:繁体Windows2000, Oracle 8.1.7 Server;Oracle Server 的NLS_LANG设置为:AMERICAN_AMERICA.ZHT16BIG5;创建数据库用户Test;
客户端:简体中文Windows2000,INTRALINK Client;
测试步骤:
1)在客户端打开一个命令行窗口;
2)设置NLS_LANG环境变量:set NLS_LANG=AMERICAN_AMERICA.ZHT16BIG5;
3)登录到远程Oracle数据库:sqlplus test/test@tiger;
4)查询:select customer from mfg;
5)测试test_ora.php程序(NLS_LANG设置为AMERICAN_AMERICA.ZHT16BIG5);
结果:在命令行窗口无法正常显示繁体中文字符;在浏览器中运行test_ora.php也无法正常显示繁体中文。

第六种:
测试环境:同第五种;
测试步骤:
1)在客户端打开一个命令行窗口;
2)设置NLS_LANG环境变量:set NLS_LANG=AMERICAN_CHINA.ZHS16CGB231280;
3)登录到远程Oracle数据库:sqlplus test/test@tiger;
4)查询:select customer from mfg;
5)测试test_ora.php程序;
结果:在命令行窗口显示的内容变为简体中文;在浏览器中运行test_ora.php无法正常显示。

第七种:
测试环境:同第五种;
测试步骤:使用Toad工具,登录到Oracle数据库:test/test@tiger,查询mfg表内容;
结果:在Toad工具中显示的内容也自动变为简体中文;

结论:
1)使用PHP连接Oracle,程序中的NLS_LANG设置必须与Oracle服务端的设置完全一样;
2)INTRALINK的Oracle数据库比较特殊,服务端和客户端的NLS_LANG设置不同,但INTRALINK Client从数据库读出内容后会进行自动处理,使之在客户端可以正常显示;
3)Toad和INTRALINK差不多,读出数据库的数据后也能根据客户端的设置自动转化字符后显示;
4)在安装有INTRALINK的计算机上无法通过PHP获取其它计算机上的Oracle数据库中带有中文字符的内容(意味着ELDN Server无法安装在已经装有INTRALINK的计算机上);
:D


湃睿技术社区 - Powered By BMForum Myna 6.0

posted @ 2012-01-30 22:58  duluc  阅读(427)  评论(0编辑  收藏  举报