ORACLE中文显示乱码及PLSQL乱码

前几天新建vmware,安装好oracle10g数据库,导入项目中SQL脚本,中文全部显示乱码。

现整理网上寻找的答案供大家参考:

1、查询数据库当前字符集

SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
PARAMETER                                VALUE
---------------------------------------- ----------------------------------------
NLS_CHARACTERSET                         WE8ISO8859P1
如果大家的字符集和我的一样,则说明可以按照我下面的步骤进行校正。

该问题主要是在按照oracle时没有选择字符集采用的是Linux操作系统默认字符集:WE8ISO8859P1


解决办法:

1、关闭数据库

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down
2、mount启动数据库

SQL> startup mount
ORACLE instance started.
Total System Global Area  205520896 bytes
Fixed Size                  1266608 bytes
Variable Size             100666448 bytes
Database Buffers          100663296 bytes
Redo Buffers                2924544 bytes
Database mounted.
3、限制session

SQL> alter system enable restricted session;
System altered.
4、查看并修改相关参数

SQL> show parameter job_queue_processes;  
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
job_queue_processes                  integer     10

SQL> show parameter aq_tm_processes; 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes                      integer     0

SQL> alter system set job_queue_processes=0;
System altered.
5、打开数据库

SQL> alter database open;
Database altered.
6、修改字符集

SQL> alter database character set ZHS16GBK;
alter database character set ZHS16GBK
*
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set

出现错误提示,新字符集必须是老字符集的超集,也就原来字符集是新字符集的子集,可以再Oracle官方文档上查询字符集包含关系。下面使用Oracle内部命令internal_use,跳过超集检查,生产环境不建议使用此方法。

SQL> alter database character set internal_use ZHS16GBK;          
Database altered.
7、再次查看当前字符集

SQL> select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
PARAMETER                                VALUE
---------------------------------------- ----------------------------------------
NLS_CHARACTERSET                         ZHS16GBK
8、关闭数据库

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
9、mount启动数据库

SQL> startup mount
ORACLE instance started.
Total System Global Area  205520896 bytes
Fixed Size                  1266608 bytes
Variable Size             100666448 bytes
Database Buffers          100663296 bytes
Redo Buffers                2924544 bytes
Database mounted.
10、将上面第4步骤修改的相关参数还原

SQL> alter system set job_queue_processes=10;
System altered.
11、打开数据库

SQL> alter database open;
Database altered.
至此该问题就已经解决了。如果你用PLSQL查看的时候还是乱码那你在本地在设置一个环境变量:

NLS_LANG 值为SIMPLIFIED CHINESE_CHINA.ZHS16GBK

设置完成后基本就OK了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值