高分求解!为何在linux+apache+php+oracle的website环境下,从oracle里读出的中文是“???”的乱码? ( 积分: 200 )

  • 主题发起人 主题发起人 xanadu
  • 开始时间 开始时间
X

xanadu

Unregistered / Unconfirmed
GUEST, unregistred user!
高分求解!为何在linux+apache+php+oracle的website环境下,从oracle里读出的中文是“???”的乱码?
 
高分求解!为何在linux+apache+php+oracle的website环境下,从oracle里读出的中文是“???”的乱码?
 
一般,是因为字符集设置不对照成的。
解决方法:
1、检查服务器上Oracle数据库的字符集
SQL> conn sys/change_on_install
连接成功.
SQL> desc props$
列名 可空值否 类型
------------------------------- -------- ----
NAME NOT NULL VARCHAR2(30)
VALUE$ VARCHAR2(2000)
COMMENT$ VARCHAR2(2000)
SQL> col value$ format a40
SQL> select name,value$ from props$;
NAME VALUE$
------------------------------ -------------------------
DICT.BASE 2
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_DATE_FORMAT DD-MON-YY
NLS_DATE_LANGUAGE AMERICAN
NLS_CHARACTERSET ZHS16GBK
NLS_SORT BINARY
NLS_CALENDAR GREGORIAN
NLS_RDBMS_VERSION 7.3.4.0.0
GLOBAL_DB_NAME ORACLE.WORLD
EXPORT_VIEWS_VERSION 3
查询到14记录.
NLS_CHARACTERSET这个参数应该是ZHS16GBK,如不是,改为它。
SQL*Plus中修改方法:
SQL> update props$ set value$='新字符集' where name='NLS_CHARACTERSET';
操作系统中修改方法:
connect internal
alter database ORCL character set ZHS16GBK;
alter database ORCL national character set ZHS16GBK;

2、检查操作系统级Oracle汉字显示的字符集
运行regedit,定位到:
HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE
找到以下字符串
NLS_LANG
检查是否以下内容,如不是,改之
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
 
SQL> alter database ORCL character set ZHS16GBK;
alter database ORCL character set ZHS16GBK
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
web服务器是在linux系统下面的。
 
后退
顶部