1.oracle server端字符集查詢
代碼以下:
select userenv('language') from dual;
sql
server字符集修改:數據庫
將數據庫啓動到RESTRICTED模式下作字符集更改:
代碼以下:
SQL>conn /as sysdbabash
SQL>shutdown immediate; oracle
SQL>startup mountssh
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION; 測試
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; spa
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;orm
SQL>alter database open; server
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK;對象
ALTER DATABASE CHARACTER SET ZHS16GBK ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
提示咱們的字符集:新字符集必須爲舊字符集的超集,這時咱們能夠跳過超集的檢查作更改:
代碼以下:
SQL>ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
SQL>select * from v$nls_parameters;
重啓檢查是否更改完成:
代碼以下:
SQL>shutdown immediate;
SQL>startup
SQL>select * from v$nls_parameters;
咱們看到這個過程和以前ALTER DATABASE CHARACTER SET操做的內部過程是徹底相同的,也就是說INTERNAL_USE提供的幫助就是使Oracle數據庫繞過了子集與超集的校驗
這一方法在某些方面是有用處的,好比測試;應用於產品環境時你們應該當心,可能會有一些意外的問題。
2.oracle client端字符集修改
代碼以下:
$echo$NLS_LANG
client字符集修改:
在 /home/oracle與 /root用戶目錄下的.bash_profile中添加或修改 export NLS_LANG="AMERICAN_AMERICA.UTF8" 語句
關閉當前ssh窗口。
注意:NLS_LANG變量必定要配置正確不然會引發sqlplus失效。
3.修改數據庫字符集爲UTF-8
1.以DBA登陸
2.執行轉換語句:
代碼以下:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT EXCLUSIVE;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE NATIONAL CHARACTER SET UTF8;
SHUTDOWN IMMEDIATE;
STARTUP;
注意:若是沒有大對象,在使用過程當中進行語言轉換沒有什麼影響!
可能會出現ORA-12717:CANNOT ALTER DATABASE NATIONAL CHARACTER SET WHEN NCLOBDATAEXISTS, 解決這個問題的方法
利用INTERNAL_USE 關鍵字修改區域設置代碼以下:ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;