檢視資料庫當前資料集有兩種方式:
a).select name,value$ from props$ where name like '%nls_characterset%',
b).select userenv('language') from dual;
1.常規方案修改資料庫字符集
1).sys登陸資料庫:conn / as sysdba;
2).關閉資料庫:shutdown immediate;
3).以mount方式開啟資料庫:startup mount;
4).限制其它使用者連線資料庫使用資源: alter system enable restricted session;
5).檢視系統當前的程序(最大連線數):show parameter processes;記住job_queue_processes引數的當前值,後面需要修改回來。
6).殺掉cjq0及相應job程序: alter system set job_queue_processes=0;
7).修改佇列監視程序引數alter system set aq_tm_processes=0;
8).更改資料庫為open方式:alter database open;
9).更改字符集:alter database character set us7ascii;
ora-12712: 新字符集必須為舊字符集的超集
ora-12716: cannot alter database character set when clob data exists
2. 針對以上的錯誤a)的解決方案:使用internal_use跳過超集檢測
alter database character set internal_use us7ascii;
3. 針對以上的錯誤b)的解決方案:使用internal_convert轉換含有clob欄位的表
1).截斷表truncate table metastylesheet;
2).alter database character set internal_convert zhs16gbk;-- oracle會自動轉換含有clob
3).因為前面清空了sys.metastylesheet表,需要重新建立
9.2通過執行catmet.sql指令碼來重建;@?/rdbms/admin/catmet.sql
10g後通過執行catmeta.sql指令碼來重建:@?/rdbms/admin/catmeta.sql
(注意這個地方有待商榷,不確定,最好不要使用這種方法修改)
4.完成方案a)和b)後再做如下步驟:
1).檢視當前字符集,確認是否正確修改select userenv('language') from dual;
2).解除限制:
alter system disable restricted session;
alter system set job_queue_processes=10;--修改回開始記錄的原始值
3).關閉資料庫再開啟;
4).簡單測試下insert int t values('測試亂碼');看還有亂碼否
修改資料庫字符集
新增環境變數修改資料庫字符集設定環境變數 在my computer properties advanced environment variables system variables 新增環境變數設定,如 variable name nls lang,variable value simplifi...
修改資料庫的預設字符集
預設字符集下char和varchar不處理中文 這裡是修改字符集的方式和語句 mysql字符集詳解 點我 建資料庫的時候新增字符集 create datebase ii character set utf8 建表的時候新增字符集 default charset utf8 顯示表的字符集 show c...
oracle 修改資料庫的字符集編碼為UTF 8
1 檢視資料庫字符集 資料庫伺服器字符集select from nls database parameters,其 於props 是表示資料庫的字符集。客戶端字符集環境select from nls instance parameters,其 於v parameter,表示客戶端的字符集的設定,可能...