客户端为Oracle 11g 查询中文字体 显示乱码

在32位操作系统下

修改  HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraClient11g_home1 下的 NLS_LANG值为 AMERICAN_AMERICA.UTF8

在64位操作系统下

修改 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ORACLE\KEY_OraClient11g_home1 下的 NLS_LANG值为 AMERICAN_AMERICA.UTF8

分析原因:

引用网上帖子:

oracle字符集问题一般可以分为三类: 数据库字符集, sqlplus的字符集(客户端字符集), 终端程序的字符集(非oracle的)。

1、数据库字符集。

数据库字符集是所有字符问题的核心,只有数据库本身的字符集正确了,客户端的字符集才可能正确。这里只的客户端包括sqlplus以及我们自己读数据库的应用程序。

在定位问题时,我们需要先看看数据库当前是什么字符集。

1)查询数据库字符集

select * from nls_database_parameters

其中 nls_language表示了显示方式, 就是sqlplus的程序的显示字体,有SIMPLIFIED CHINESE,American america

其中  nls_characterset是字符集设定, 常用的一些字符集有UTF8,US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK, AL32UTF8

2)修改数据库字符集

当发现数据库字符集不正确时,如我们期望时GBK的,而数据库当前是其他的,从而引起中文乱码。这时我们需要修改数据库字符集。步骤如下:

$sqlplus /nolog

SQL>conn / as sysdba;

若此时数据库服务器已启动,则先执行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 ZHS16GBK;

SQL>ALTER DATABASE national CHARACTER SET ZHS16GBK;

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP

2 客户端字符集 如果服务器端的字符集是正确的,而在客户端下,如sqlplus仍然不能正确显示中文,这一般是由于服务器端的字符集设定与客户端的字符集设定不同造成的。只要将两者修改一致就可以解决问题。

1)查询客户端字符集

select * from nls_instance_parameters

客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,

表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

select userenv('language') from dual;

会话字符集环境 select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件

字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。  或者.zhs16gbk。注意zhs16gbk前面那个点是必须的哦!!

2) 修改客户端字符集

oracle 的sqlplus会去读取OS中环境变量下的nls_lang信息(关键在这里,通过以上命令查看

select * from nls_database_parameters 显示

NLS_LANGUAGE                   AMERICAN

NLS_TERRITORY                  AMERICA

NLS_CURRENCY                   $

select * from nls_instance_parameters 显示

NLS_LANGUAGE                   SIMPLIFIED CHINESE

NLS_TERRITORY                  CHINA

NLS_SORT

NLS_DATE_LANGUAGE

NLS_DATE_FORMAT

NLS_CURRENCY

select * from nls_session_parameters 显示

NLS_LANGUAGE                   SIMPLIFIED CHINESE

NLS_TERRITORY                  CHINA

NLS_CURRENCY                   RMB

也就是说会话字符集与终端字符集一致,而与数据库字符集设置不一致。

另一个数据库实例sc

数据库字符集

select * from nls_database_parameters 显示

NLS_LANGUAGE                   AMERICAN

NLS_TERRITORY                  AMERICA

NLS_CURRENCY                   $

select * from nls_instance_parameters 显示

NLS_LANGUAGE                   AMERICAN

NLS_TERRITORY                  AMERICA

NLS_SORT

NLS_DATE_LANGUAGE

NLS_DATE_FORMAT

NLS_CURRENCY

在linux下

select * from nls_session_parameters 显示

NLS_LANGUAGE                   AMERICAN

NLS_TERRITORY                  AMERICA

用TOD 在windows下显示

NLS_LANGUAGE                   SIMPLIFIED CHINESE

NLS_TERRITORY                  CHINA

NLS_CURRENCY                   RMB

这个我还搞不明白为什么windows与linux会话字符集为什么不一样。

更搞不明白的是为什么两个数据库实例用同一个系统用户查询的,也就是说环境变量是一样的,但查询结果终端字符集为什么会不一样?初步分析(当然不一定对,欢迎指正)是两个数据库实例的参数文件不一致引起的,因为alter session>环境变量>注册表>参数文件,也就是说因为环境变量没有设置,但sc与st数据库实例参数文件不同,但是参数文件在什么地方设还不清楚,有高手欢迎指点!

但基本上问题锁定是因为终端字符集与数据库字符集不一致引起,在用户的环境变量中增加

export NLS_LANG=AMERICAN_AMERICA.UTF8

export LANG=en_US.UTF-8

问题解决

再次查看客户端字符集

select * from nls_instance_parameters 还是显示

NLS_LANGUAGE                   SIMPLIFIED CHINESE

NLS_TERRITORY                  CHINA

NLS_SORT

NLS_DATE_LANGUAGE

NLS_DATE_FORMAT

NLS_CURRENCY

select * from nls_session_parameters 显示

NLS_LANGUAGE        AMERICAN

NLS_TERRITORY         AMERICA

NLS_CURRENCY         $

看来只要本次会话字符集正确就没问题了,经过验证确实如此,用

alter session set NLS_LANGUAGE=‘AMERICAN’后本次会话也不会出现乱码的。

)

NSL_LANG包括三个部分(语言_地区.字符集)就是V$NLS_PARAMETERS表中的NLS_LANGUAGE,NLS_TERRITORY,NLS_CHARACTERSET

例如可以在cmd中键入

set nls_lang="Simplified chinese_china.utf8"

set nls_lang="american_america.us7ascii"

set nls_lang="american_america.zhs16gbk"

set nls_lang="Simplified chinese_china.zhs16gbk"

set nls_lang=".utf8"

set nls_lang=".zhs16gbk"

set nls_lang=".us7ascii"

unix下类似, 不过nls_lang要大写NLS_LANG, 在.profile或这.bash_profile(根据你用的shell)里更改NLS_LANG可以长久保持环境变量值.

3、终端字符集     如果数据库字符集和sqlplus的字符集一致, 还是不能正确显示了, 那很可能就是你的终端应用程序的字符集不支持了. 例如你用bash登陆sqlplus, 如果你的bash是个小字符集, 那么就不能正常显示了.linux修改bash的字符集, 可以先键入locale, 看有哪些环境变量, 再用export设置.

oracle字体为红色,ORACLE 显示 中文字体相关推荐

  1. qt linux 程序设置字体,QT程序中显示中文字体解决办法

    最近一直在做移植qtopia4.4.3和QT4.7的工作.qtopia已经可以在龙芯开发板上正常运行.搭建QT4.7的环境,使用QT4.7编写小程序,发现不能显示中文.研究了一番,找到了如下的解决方法 ...

  2. OpenCV显示中文字体

    01.引言 OpenCV-Python 是一个用来图像处理的 Python 库,但其一般不能在图片上显示中文,否则会乱码.但有些情况下我们必须要显示中文,因此,我们可以使用 PIL 库来写中文,再转换 ...

  3. 9、10、11、12、13_添加标注 (Annotations)、添加网格线(Grid Lines)、显示中文字体、保存图形(saving Figures)、高质量矢量图输出

    9.添加标注 (Annotations) 10.添加网格线(Grid Lines) 11.显示中文字体 12.保存图形(saving Figures) 13.高质量矢量图输出 9.添加标注 (Anno ...

  4. matplotlib 无法显示中文字体的解决方法

    matplotlib 无法显示中文字体的解决方法 参考文章: (1)matplotlib 无法显示中文字体的解决方法 (2)https://www.cnblogs.com/lingLongBaby/p ...

  5. Altium AD20批量修改丝印大小、更改丝印字体、丝印显示中文、更改位号丝印 相对元件的位置

    AD默认的丝印不大美观,那么多位号的丝印,想一个个单个去修改显得不现实.这里借助全局批量修改,快速更改丝印的字体.大小.显示中文.相对元件位置. AD20批量修改丝印大小.字体 选中其中一个丝印,右键 ...

  6. python显示汉字_python如何显示中文字体

    python如何显示中文字体? 在这里,你可以选择2种不同的解决方法 方法一:定义声明好编码格式 首先你要做的,是在打开写入文件时,声明encoding编码put_in = open(becopyed ...

  7. 【MacBook python画图显示中文字体】

    mac系统hewindows系统在画图时显示中文字体的方式不一样,mac用python画图时需要加上 plt.rcParams['font.sans-serif'] = ['Arial Unicode ...

  8. python中文字体下载_Python在Matplotlib图中显示中文字体的操作方法

    1. 说明 本篇主要针对在Ubuntu系统中,matplotlib显示不了中文的问题,尤其是在无法安装系统字体的情况下,解决Python绘图时中文显示的问题. 2. 在系统中安装字体 $ fc-lis ...

  9. Ubuntu下让matplotlib显示中文字体

    文章目录 安装中文字体 显示matplotlib库的字体文件夹 删除matplotlib 的缓存文件(可选) matplotlib中设置字体,显示! 参考文章: https://zodiac911.g ...

  10. 修改Typora默认的字体为好看秀美的中文字体“华康手札体“并配置一些高级定制功能(20210404已成功测试)

    本次测试环境 winodws10操作系统 typora软件:0.0.98(相近版本一般都可以进行验证操作) 1.请客官先体验下最终效果图 大家可先瞅一瞅最终修改后的效果图如何,再根据自己需求是否决定要 ...

最新文章

  1. VS 打开No EditorOptionDefinition export found for the given option name问题解决
  2. npm包开发测试与发布
  3. linux init进程是所有用户进程的祖先进程,Linux中init进程介绍及常用方法
  4. opencv去除图片的高光
  5. 化生政组合能选计算机专业吗,化生政这个组合好不好? 适合哪些人报考
  6. Java sqlite事务方法,Java SQLiteDatabase.insert方法代码示例
  7. 如何获得即时编译器(JIT)的汇编代码(linux环境下)
  8. 浅谈oracle中for update 和 for update nowait 和 for update wait x的区别
  9. Linux是命令行吗,你真的了解Linux命令吗?
  10. 你根本就不需要认识这么多大佬
  11. 考不上本科就是低智商?用python爬3000条数据狠打脸
  12. DiskFileItemFactory类的使用
  13. vector 赋值_从零开始学习R语言(一)——数据结构之“向量”(Vector)
  14. 简短的爬虫程序,14行Python代码轻松实现爬取网站视频
  15. python控制电脑音量,声音之控制音量,,
  16. 小行星项目第2部分测试驱动开发
  17. opboot怎么刷入固件_OPPO手机怎么进行系统(固件)升级?(附四种方法)
  18. 最薄的 4K 雷电 3 显示器 — ThinkVision X1 (2nd Gen) 长测
  19. Daily Accumulation
  20. MCMC和贝叶斯统计在宇宙微波背景辐射(CMB)中应用

热门文章

  1. VMware中linux系统调整为最佳分辨率,自适应宿主机
  2. 企业级正规php第三方api,ThinkPHP新版企业级php第三方api第四方支付平台程序源码商业版 带接口文件等...
  3. Python科学计算之Numpy概念和数组结构
  4. 微信小程序怎么给数据库的一个记录里新增图片数据?
  5. 非智能手机java_非智能手机操作系统两大介绍【图文】
  6. 【个人知识成长】-1.2-知识树
  7. 新零售系统服务商帮助品牌打通线上线下,实现销售额增长
  8. 企业软文营销年度计划如何激发“内容篝火”
  9. 打击犯罪(black)
  10. Mysql5.7默认密码_MySQL5.7初始密码查看及重置