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

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

被折叠的 条评论
为什么被折叠?



