一.PL/SQL亂碼
- 1.查詢數據庫使用的編碼
select userenv('language') from dual
- 2.配置環境變量,指定客戶端要使用的編碼。
- 環境變量的key是:NLS_LANG
- 環境變量的值是:上面的查詢中查出來的Fields的值
二.修改oracle字符集將字符編碼WE8MSWIN1252修改爲UTF8(或者AL32UTF8)
參考文章:
https://blog.csdn.net/u011186019/article/details/50959955
http://www.voidcn.com/article/p-mtehywhh-byx.html
採用的是操作系統默認字符集:WE8MSWIN1252,將字符集修改爲:AL32UTF8。
SQL> select userenv('language') from dual;
SIMPLIFIED CHINESE_CHINA.WE8MSWIN1252
SQL> select * from nls_database_parameters where parameter in ('NLS_CHARACTERSET','NLS_NCHAR_CHARACTERSET');
SQL> select* from v$nls_parameters where parameter='NLS_CHARACTERSET';
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 918618112 bytes
Fixed Size 2258640 bytes
Variable Size 549456176 bytes
Database Buffers 360710144 bytes
Redo Buffers 6193152 bytes
Database mounted.
SQL> alter session set sql_trace=true;
Session altered.
SQL> alter system enable restricted session;
System altered.
-- 查看processes是否爲0
SQL> show parameter job_queue_processes;
SQL> alter system set job_queue_processes=0;
System altered.
SQL> alter system set aq_tm_processes=0;
System altered.
SQL> alter database open;
Database altered.
SQL> alter database character set INTERNAL_USE UTF8(或者用AL32UTF8);
Database altered.
SQL> update props$ set VALUE$=‘UTF8‘ where NAME=‘NLS_NCHAR_CHARACTERSET‘;
1 row updated.
SQL> commit ;
Commit complete.
維護完以後需要(不然有些用戶會被鎖住)
SQL>ALTER SYSTEM DISABLE RESTRICTED SESSION;
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 918618112 bytes
Fixed Size 2258640 bytes
Variable Size 549456176 bytes
Database Buffers 360710144 bytes
Redo Buffers 6193152 bytes
Database mounted.
Database opened.
SQL> show parameter undo_undo_retention
SQL> show parameter undo_retention
Oracle字符集的查看和修改 http://www.linuxidc.com/Linux/2013-07/87538.htm
Oracle字符集的查看查詢和Oracle字符集的設置修改 http://www.linuxidc.com/Linux/2011-11/47383.htm
三.timestamp字段的值亂碼問題修改
在登錄PLSQL之後,查詢相應數據庫數據時,發現PLSQL的timestamp顯示亂碼,如下圖所示。
查詢數據庫服務器端字符集編碼,使用如下命令: select userenv(‘language‘) from dual
結果如下:SIMPLIFIED CHINESE_CHINA.AL32UTF8
在環境變量中設置NLS_LANG = ‘SIMPLIFIED CHINESE_CHINA.AL32UTF8’
亂碼依然存在,修改註冊表NLS_LANG 值爲 :SIMPLIFIED CHINESE_CHINA.AL32UTF8
重啓終端後,發現其他字段亂碼問題解決,但是timestamp類型數據亂碼。
從另一個方面分析,其他字段的中文顯示並沒有亂碼,從這二者差異上看應該是timstamp類型的數據亂碼。需要進一步分析下原因。
可以單獨設置時間戳的環境變量NLS_TIMESTAMP_FORMAT,數據值爲YYYY-MM-DD HH24:MI:SS:FF6
key值爲:NLS_TIMESTAMP_FORMAT
value的值爲:YYYY-MM-DD HH24:MI:SSFF6