PL/SQL编辑器乱码,以及oracle修改字符集、timestamp字段的值乱码问题修改

本文详细介绍了如何解决PL/SQL编辑器的乱码问题,包括查询和修改Oracle数据库的字符集,将WE8MSWIN1252更改为UTF8,以及针对timestamp字段值乱码的特殊处理,如设置NLS_LANG和NLS_TIMESTAMP_FORMAT环境变量。

一.PL/SQL乱码

  • 1.查询数据库使用的编码
  • select userenv('language') from dual
  • 2.配置环境变量,指定客户端要使用的编码。
    • 环境变量的key是:NLS_LANG
    • 环境变量的值是:上面的查询中查出来的Fields的值

二.修改oracle字符集将字符编码WE8MSWIN1252修改为UTF8(或者AL32UTF8)

参考文章:

https://blog.youkuaiyun.com/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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值