PL/SQL編輯器亂碼,以及oracle修改字符集、timestamp字段的值亂碼問題修改

一.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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章