解決方法:
第一步: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>