毕设总总--Oracle
时间:2011-04-12 来源:剑舞
突然意识到需要把近期遇到的一切技术情况记载下来。
今天是继昨天之后,又非常恶心的一天。今天的主要任务是在redhat+Oracle+apache+php的环境下搭建好自己的演示系统。
首先一个上午的时间几乎都花在了样例数据库的建立上,建立样例数据库是一件非常非常及其恶心万恶的事情,不停地编写各种各样的需求样例。
几个问题需要自己注意。
1.在redhat5下通常会自身装好一个apache,但是我自己又安装了apache,当师兄重启服务器是,系统默认又启动了自带apache,而我已经配置好的apache并没有被启动,所以需要卸载其再带的apache,然后再重新启动我安装的apache。
2.数据库字符集问题,Oracle默认的字符集通常是WE8ISO8859P1,这是一个英文字符集,但是我存储的是中文数据,解决的方法又两个,一是重新创建数据库,二是利用如下方法:
(1)、ssh登录,切换到oracle用户
切换用户命令:su -oracle
之后用sqlplus登录oracle,命令:
:sqlplus /nolog
:connect /as sysdba
这样就登录了。
(2)、更改字符集
首先 sqlplus登录后,关闭oracle数据库
1.shutdown immediate ;
2.startup mount ;
3.alter system enable restricted session ;
4.alter system set JOB_QUEUE_PROCESSES=0;
5.alter system set AQ_TM_PROCESSES=0;
6.alter database open ;
7. alter database character set INTERNAL_USE ZHS16CGB231280;
8.shutdown immediate ;
9.startup ;
通过上面的方法,就可以有效解决数据库的字符集问题,数据库采用ZHS16CGB231280进行字符存储。ZHS16CGB231280也就是平时我们所说的GB2312字符集。此时,我用sql developer客户端来访问数据库是正常的。
3、当一切都顺利是,我发现我上传的网页显示不正常,php读取的数据库中文数据全部显示为问号,但是在我本机搭建的服务器却可以正常显示。
服务器:英文redhat+修改过字符集的英文oracle10g+apache
本机服务器:中文windowsXP+中文oracle11g+apache。
首先,我分析,我的网页中的中文字符(非数据库数据)显示正常,所以可以确定这个问题跟英文linux无关,所以我就吧问题分析点放在oracle上,网上有很多类似的问题,都是在讲字符集的问题,但是没有个真正的解决方案。所以根据一些字符集的相关文章我了解了,服务器字符集和客户端字符集的区别。我的sql developer可以正常访问数据库的中文数据,说明服务器字符集没有问题。但是我的网页php访问数据库中文数据却出现问题,所以问题一定出在php连接数据库上。功夫不负有心人,我终于找到一个繁体中文的网页,里面讲到,连接的时候要声明php连接oracle的字符集。
我原来的连接方法:$conn = oci_connect('scuter', 'scuter', 'localhost/orcl');
修改后的连接方法:$conn = oci_connect('scuter', 'scuter', 'localhost/orcl',"ZHS16CGB231280");
此时一切正常。问题的原因我估计是因为我修改过字符集的ORACLE虽说可以存取中文数据,但是却在php连接时需要指定字符集。而我本机的中文oracle11g由于创建数据库时,我就设计了中文,所以可以不指定字符集而连接。