精华内容
下载资源
问答
  • sqlplus中文乱码

    万次阅读 2018-07-17 17:59:02
    要解决Oracle的客户端乱码问题关键是要把服务器端使用的字符集跟客户端使用的字符集统一起来。Oracle客户端(Sqlplus)通过NLS_LANG环境变量来确定客户端使用的字符集。NLS_LANG参数由以下部分组成: NLS_LANG=&...

    要解决Oracle的客户端乱码问题关键是要把服务器端使用的字符集跟客户端使用的字符集统一起来。Oracle客户端(Sqlplus)通过NLS_LANG环境变量来确定客户端使用的字符集。NLS_LANG参数由以下部分组成:
    NLS_LANG=<Language>_<Territory>.<Clients Characterset>

    NLS_LANG各部分含义如下:
    LANGUAGE指定:
    -Oracle消息使用的语言
    -日期中月份和日显示
    TERRITORY指定
    -货币和数字格式
    -地区和计算星期及日期的习惯
    CHARACTERSET:
    -控制客户端应用程序使用的字符集
    通常设置或者等于客户端(如Windows)代码页 
    或者对于unicode应用设置为UTF8

     

    RedHat linux AS4.0安装了oracle10g,同时创建数据库实例sc,后来又用dbca建立一个数据库实例st,发现在oracle系统用户下用sqlplus连接st实例时出现乱码,应该是中文无法显示造成的,但连接sc实例时无乱码,显示英文。上网搜集了一下资料,修改了oracle系统用户的环境变量在.bash_profile中新增了以下内容解决:

    export NLS_LANG=AMERICAN_AMERICA.UTF8
    export LANG=en_US.UTF-8

    分析原因:

    引用网上帖子:

    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@jydb1 ~]$ export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
    [oracle@jydb1 ~]$ sqlplus  / as sysdba
    
    SQL*Plus: Release 12.2.0.1.0 Production on 星期二 7月 17 17:47:09 2018
    
    Copyright (c) 1982, 2016, Oracle.  All rights reserved.
    
    
    连接到: 
    Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

    转载:http://blog.csdn.net/nini1109/article/details/4158796

    展开全文
  • windows emacs eshell sqlplus 中文乱码解决 问题描述 在cmd下正常,在emacs eshell下乱码,如下: 解决办法 第一步:新建环境变量 第二步:

    windows emacs eshell sqlplus 中文乱码解决

    问题描述

    在cmd下正常,在emacs eshell下乱码,如下:
    cmd
    emacs eshell

    解决办法

    在这里插入图片描述
    在这里插入图片描述

    结果

    在这里插入图片描述

    展开全文
  • RedHat 5.4 Oracle11g Sqlplus 中文乱码解决2010-09-07 15:50:35标签:RedHat Sqlplus 乱码 中文 解决转自linux公社 【问题描述】1.Linux系统中含有中文内容的文件名显示乱码;2.使用vi编辑器查看中文内容为...
     RedHat 5.4 Oracle11g Sqlplus 中文乱码解决
    2010-09-07 15:50:35

    转自linux公社

     

    【问题描述】

    1.Linux系统中含有中文内容的文件名显示乱码;
    2.使用vi编辑器查看中文内容为乱码;
    3.sqlplus进入到数据库中查看中文内容为乱码;
    4.putty中中文内容显示为乱码。

    【问题原因】
    1.没有安装中文支持的包;
    2.相应的环境变量需要做相应的调整

    【问题处理】
    1.确认系统版本
    # cat /etc/RedHat-release


    Red Hat Enterprise Linux Server release 5.4 (Tikanga)

    2.查看linux系统中是否已安装fonts-chinese中文语言支持包,如果没有安装,需要下载相应版本的rpm包进行安装
    # rpm -aq | grep fonts-chinese
    fonts-chinese-3.02-12.el5

    3.修改/etc/sysconfig/i18n文件为以下内容
    LANG="zh_CN.GB18030"
    LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
    SUPPORTED="zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en"
    SYSFONT="lata0-sun16"
    SYSFONTACM="8859-15"
    #export LC_ALL="zh_CN.GB18030"

    export部分可加可不加

    4.在/etc/profile尾部添加如下内容
    #export LC_ALL="zh_CN.GB18030"

    5.注销或者reboot,Linux系统中含有中文内容的文件名显示乱码问题和使用vi编辑器查看中文内容为乱码的问题得到解决

    6.在oracle用户的.bash_profile中添加如下内容,解决sqlplus进入到数据库中查看中文内容为乱码问题
    export NLS_LANG=“SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

    之前要确认,数据库的字符集是ZBS16GBK

    select * from nls_database_parameters;

    字段 NLS_Charset..显示

    7.设置putty中Window- Translation中的Received data assumed to be in which character set设置为ISO-8859-1:1998 (Latin-1, West Europe)解决putty中中文内容显示为乱码问题。

    至此,目前遇到的中文乱码的问题得以解决

    <script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
    阅读(638) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
评论热议
展开全文
  • PLSQL中文乱码 问题: 解决:  思路1:设置export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"  结果:并不能解决问题!    思路2:设置 export NLS_LANG=AMERICAN_AMERICA.UTF8 export LANG=en_...

    PLSQL中文乱码

    问题:

     

    解决:

     思路1:设置 export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

      结果:并不能解决问题!

                

      思路2:设置  export NLS_LANG=AMERICAN_AMERICA.UTF8
              export LANG=en_US.UTF-8 

      结果:出现了和plsql一样的问题

         

      最后发现,这些乱码是从mysql导入进来的,后来插入的数据没问题!!!

     

    转载于:https://www.cnblogs.com/gdayq/p/7493650.html

    展开全文
  • sqlplus中文乱码的问题

    2016-02-26 21:47:15
    今天在sqlplus测试时遇到了中文乱码的问题,说到乱码的问题最先想到的就是字符集不一致的问题。问题描述:登陆时因为密码输入错误引起错误,但是显示结果是乱码。2.上网查看相关资料之后,需要设置NLS_LANG,使其与...
  • 在Linux下使用sqlplus查询数据表中文内容出现乱码。 分析及解决:因为windows下正常,所以问题应出现在Linux客户端。用下列sql查询数据库字符集为“ZHS16GBK”: SELECT*FROMnls_database_parameterst WH...
  • sqlplus 中文乱码 字符集设置

    万次阅读 2016-09-14 13:23:41
    要解决Oracle的客户端乱码问题关键是要把服务器端使用的字符集跟客户端使用的字符集统一起来。Oracle客户端(Sqlplus)通过NLS_LANG环境变量来确定客户端使用的字符集。NLS_LANG参数由以下部分组成: NLS_LANG=_. ...
  • 在oracle用户的~/.bash_profile中添加 NLS_LANG="SIMPLIFIED CHINESE"_CHINA....再次登录sqlplus乱码就没了。 注意:NLS_LANG的具体值要根据你的数据库实例的实际编码修改,一般情况下中文应该都是"SIMPLIFIED C...
  • Linux下SQLPlus中文乱码处理

    千次阅读 2018-04-15 17:44:58
    1.首先查询数据库字符集1234567SQL&gt; select userenv('language') from dual; USERENV('LANGUAGE')----------------------------------------------------AMERICAN_AMERICA.AL32UTF8 SQL&...
  • 1.确定数据库字符集 SQL> select userenv('language') from dual; USERENV('LANGUAGE') ---------------------------------------------------- ...AMERICAN_AMERICA.ZHS16GBK ...export NLS_LANG=AME...
  • 有一段时间没敲过SQL了,今天复习,想打开SQLplus敲敲,结果不知道为什么就乱码了,很是无语,于是上网查找了下解决办法,可是都没用。 网上提供最主要也是最有用的方法就是设置环境变量NLS_Lang。 解决Oracle的...
  • sqlplus中文乱码的解决!

    万次阅读 2013-06-13 12:37:50
    一直用pl/sql连的数据库,今天突然连不上了,使用sqlplus连了一下发现中文竟然是乱码的,于是速度打开注册表, win+R快捷键>>--regedit>>HKEY_LOCL_MACHINE>>SOFTWARE>>ORALCE>>KEY_ORADB11G_HOME1 NLS_LANG的值...
  • 1.打开CMD所在文件位置 2.右键属性,选项 勾选使用旧版 3.重新打开SQLPlus即可
  • 在控制台中使用SQLPlus中文总是显示为问号,在网上查到了解决的办法,总结起来,分享给大家。 Windows中:set set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK Linux中:export set NLS_LANG=SIMPLIFIED ...
  • 开始在renhat5.8系统上安装完oracle软件,在sqlplus中输入中文,显示的全是???,后来上网查询字符集的问题,自己的数据库字符集是WE8ISO8859P1,是英文字符集,不支持中文,客户端的字符集是en_US.UTF8,而且数据库...
  • 原文链接:... 可以把自己的文件通过notepad++设置为utf-8编码,然后在运行sqlplus之前 windows下:cmd命令行下 set NLS_LANG=AMERICAN_AMERICA.UTF8 linux下: export NLS_LANG=AMERIC...
  • 怎么解决Oracle的sqlplus乱码?

    千次阅读 2019-03-29 13:21:55
    SqlPlus中文乱码问题解决 1.查看服务器端编码 select userenv('language') from dual; 结果是:AMERICAN_AMERICA.ZHS16GBK 2.执行下列语句 select * from V$NLS_PARAMETERS 查看第一行中PARAMETER项中为...
  • Linux Oracle10g sqlplus 中文提示是乱码???? 检举 | 2010-10-26 16:19 提问者: chunxiao1222 | 浏览次数:1522次 oracle database 的NLS_CHARACTERSET是UTF8 ...Sqlplus中文乱码????,如下: [oracle@loc
  • sqlplus中文显示乱码的问题 2010-07-19 11:33:26 分类: LINUX 在windows下sqlplus完全正常,可是到linux下,sqlplus中文显示就出问题了,总是显示“??”或是其他乱码,这个问题又怎么解决呢? 经过在...
  • 空空如也

    空空如也

    1 2 3 4 5 ... 17
    收藏数 321
    精华内容 128
    热门标签
    关键字:

    sqlplus中文乱码