解决Oracle表中数据中文显示乱码问题

129 篇文章 7 订阅

问题描述

PLSQL中文显示乱码,可能是oracle客户端和服务器端的编码方式不一样。
在这里插入图片描述

  • 查询ORACLE服务器的语言、地域和字符集:
SQL> select * from nls_database_parameters;

PARAMETER               VALUE
------------------------------ ----------------------------------------
NLS_LANGUAGE               AMERICAN
NLS_TERRITORY               AMERICA
NLS_CURRENCY               $
NLS_ISO_CURRENCY           AMERICA
NLS_NUMERIC_CHARACTERS           .,
NLS_CHARACTERSET           WE8MSWIN1252
NLS_CALENDAR               GREGORIAN
NLS_DATE_FORMAT            DD-MON-RR
NLS_DATE_LANGUAGE           AMERICAN
NLS_SORT               BINARY
NLS_TIME_FORMAT            HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT           HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY           $
NLS_COMP               BINARY
NLS_LENGTH_SEMANTICS           BYTE
NLS_NCHAR_CONV_EXCP           FALSE
NLS_NCHAR_CHARACTERSET           AL16UTF16
NLS_RDBMS_VERSION           11.2.0.4.0

20 rows selected.

NLS_LANGUAGE 表示“语言”
NLS_TERRITORY 表示“地域”
NLS_CHARACTSET 表示“字符集”
所以“AMERICAN_AMERICA.ZHS16GBK”就是将他们三个按照“语言_地域.字符集”的格式拼接起来

  • 查看当前字符集
SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
--------------------------------------------------------------------------------
AMERICAN_AMERICA.WE8MSWIN1252

问题解决

需要修改数据库编码为ZHS16GBK

SQL> shutdown immediate;
SQL> startup mount;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL> alter database open;
SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;
SQL> shutdown immediate;
SQL> startup; 
SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.ZHS16GBK

执行以上命令完成后:查看系统环境变量是否有NLL_LANG变量,没有需要添加
变量名:NLS_LANG
变量值:AMERICAN_AMERICA.ZHS16GBK
在这里插入图片描述
注意的是,此时查看表还未正常显示,解决办法是:删除表,重新创建,再添加内容

这个表是通过数据泵导入的,因此需要重新导入这个表。
导入后正常

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值