• sqlplus显示乱码解决方法


    sqlplus显示乱码与三个方面有关

    1.数据库的字符编码

    --查看数据库的编码
    SELECT * FROM NLS_DATABASE_PARAMETERS;

     

     

    本例中,可以看到数据库中字符串(char,varchar2,clob,long)使用的是AL32UTF8编码存储,即UTF8存储。数据库中的NCHAR,NVARCHAR等使用的是AL16UTF16编码存储,即UTF16存储。

    2.客户端的字符编码

    通过NLS_LANG环境变量进行设置,设置NLS_LANG环境变量的方式有一下三种:

    第一种:设置系统环境变量

    右键《我的电脑》——》《高级系统设置》——》《环境变量》,设置NLS_LANG=AMERICAN_AMERICA.AL32UTF8

    第二种:使用注册表

    安装Oracle客户端后,Oracle客户端会自动在注册表中新增NLS项目并赋值(赋值的编码跟随系统设定)

    WIN+R——》regedit——》HKEY_LOCAL_MACHINE——》SOFTWARE——》WOW6432Node——》ORACLE——》KEY_OraClient12Home1_32bit(这里要注意,如果安装的是64位的Oracle,那么直接在SOFTWARE下就可以找到ORACLE)

     本例中,跟随系统的是中文繁体,950为繁体,936为简体。

    第三种:sql developer,pl/sql developer,toad for oracle等客户端会自动设置NLS(没有找到在哪里看,但猜测是UTF8)

    3.终端的字符编码

    终端的字符编码分类两类:

    第一类:sqlplus调用的CMD终端

     依旧是跟随系统,设置的为繁体

    第二类:toad for oracle等客户端

    这些客户端会自动设置(没有看到在哪里看,但猜测是UTF8)

    4.从头到尾过一遍

    本例使用sqlplus来过一遍,toad for oracle等客户端不具有代表性,全部自动设置了

    4.1.查看数据库的字符编码

    SELECT * FROM NLS_DATABASE_PARAMETERS;

    因为我测试数据使用的是【varchar2】类型,因此编码为AL32UTF8

    4.2.查看Oracle客户端的字符编码

    通过2的截图,可以知道,编码类型为WIN950,即中文繁体

    4.3.查看CMD终端的字符编码

    通过3的截图,可以知道,编码类型为950,即中文繁体

    4.4.过程梳理

    通过以上查询,可以得出如下流程:当一个查询发出后,存储在数据库中编码为UTF8的汉字发现客户端是BIG5,因为会自动转换,等这个汉字到达客户单的时候编码已经变为BIG5了,终端以BIG5的编码显示,因此中文繁体的汉字是不会乱码。但是存储在数据库中编码为UTF8的简体汉字发现客户端是BIG5,BIG5中没有对应简体的编码,因此到达客户端时已经乱码,在终端显示肯定为乱码

    接下来修改客户端编码为UTF8。这时候,数据库到客户端的汉字(繁体或者简体)都不需要在转码了,到达客户端是UTF8形式编码的,此时终端使用BIG5显示,会导致全部乱码。

    接下来我们修改终端编码为UTF8,此时到达客户端的是UTF8编码,终端使用UTF8编码显示,就不会乱码了。

    在CMD中使用【chcp 65001】命令可以将CMD编码设定为UTF8

  • 相关阅读:
    Lua环境
    WebKit
    Net线程间通信的异步机制
    Cucumber入门1 传统流程下的使用
    Windows Server 2008中安装IIS7.0
    WebCore
    百度云计算平台Python环境试用
    认识ASP.NET MVC的5种AuthorizationFilter
    浅谈java中常见的排序
    go语言中goroutine的使用
  • 原文地址:https://www.cnblogs.com/monkey6/p/14580308.html
Copyright © 2020-2023  润新知