解决方法: 第一步:sqlplus下执行:select userenv('language') from dual;//查看oracle字符集 注:如果oracle字符集与后台代码设置的字符集不一致就会出现乱码 第二步:修改SYS.PROPS$表。即用SYS用户登陆ORACLE后,利用下面语句修改相应的字符集并提交:SQL>UPDATE PROPS$ SET VALUE$=’ZHS16GBK‘WHERE NAME=’NLS_CHARACTERSET’;SQL>COMMIT;
通过此种方法来更改数据库字符集,只对更改后的数据有效,即数据库中原来的数据仍以原字符集被存储。 注:使用sys登陆的密码是manager 连接方式为 sysdba
注:查询数据库字符集(oracle server 端 字符集查询):oracle: select userenv(’language’) from dual; --查询的是Oracle服务器端字符集
原文链接---------http://wenda.so.com/q/1408152629727270?src=110
数据库字符集修改案例:
Microsoft Windows [版本 10.0.14393] (c) 2016 Microsoft Corporation。保留所有权利。
C:\WINDOWS\system32>sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on 星期一 12月 19 09:29:31 2016
Copyright (c) 1982, 2010, Oracle. All rights reserved.
SQL> conn /as sysdba 已连接。 SQL> select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';
PARAMETER ------------------------------------------------------------ VALUE -------------------------------------------------------------------------------- NLS_CHARACTERSET AL32UTF8
SQL> shutdown immediate; 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup mount; ORACLE 例程已经启动。
Total System Global Area 3390558208 bytes Fixed Size 2180464 bytes Variable Size 2013268624 bytes Database Buffers 1358954496 bytes Redo Buffers 16154624 bytes 数据库装载完毕。 SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
系统已更改。
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
系统已更改。
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
系统已更改。
SQL> alter database open;
数据库已更改。
SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; ALTER DATABASE CHARACTER SET ZHS16GBK * 第 1 行出现错误: ORA-12712: 新字符集必须为旧字符集的超集
SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
数据库已更改。
SQL> shutdown immediate; 数据库已经关闭。 已经卸载数据库。 ORACLE 例程已经关闭。 SQL> startup; ORACLE 例程已经启动。
Total System Global Area 3390558208 bytes Fixed Size 2180464 bytes Variable Size 2013268624 bytes Database Buffers 1358954496 bytes Redo Buffers 16154624 bytes 数据库装载完毕。 数据库已经打开。 SQL> |