sqlplus显示乱码解决方法

摘要:
然而,数据库中存储的编码为UTF8的简体中文字符在客户端被发现是BIG5,而BIG5中没有相应的简体中文代码,因此代码在到达客户端时是乱码,在终端上显示时必须是乱码。接下来,客户端代码被修改为UTF8。接下来,我们将终端代码修改为UTF8.此时,到达客户端的终端代码是UTF8,终端使用UTF8显示,因此代码不会乱码。使用CMD中的命令将CMD代码设置为UTF8

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

1.数据库的字符编码

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

 sqlplus显示乱码解决方法第1张

 sqlplus显示乱码解决方法第2张

本例中,可以看到数据库中字符串(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)

sqlplus显示乱码解决方法第3张

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

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

3.终端的字符编码

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

第一类:sqlplus调用的CMD终端

sqlplus显示乱码解决方法第4张

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

第二类: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中没有对应简体的编码,因此到达客户端时已经乱码,在终端显示肯定为乱码

sqlplus显示乱码解决方法第5张

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

sqlplus显示乱码解决方法第6张

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

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

sqlplus显示乱码解决方法第7张

免责声明:文章转载自《sqlplus显示乱码解决方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇oracle—排名函数与窗口函数Openfire:安装指南下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle等待事件分析与AWR和ASH报告_鲨鱼胃的博客程序员资料_ash报告和awr报告的区别

Oracle等待事件分析与AWR和ASH报告_鲨鱼胃的博客-程序员资料_ash报告和awr报告的区别 技术标签: 笔记  oracle  Oracle     文章目录 1 ASH和AWR 1.1 ASH 1.1.1 ash占用的内存大小 1.2 AWR 1.3 等待事件分析 1.4 MMON进程与MMNL进程 1.4.1 MMON进程 1.4....

MYSQL 数据库导入导出命令

在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。所以一般推荐用SQL脚本形式导入。下面分别介绍两种方法。 MySQL命令行导出数据库 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:Program FilesMySQLMySQL Server 4.1in (或...

(2356)SQLite多线程下的并发操作_飞翔的种子_百度空间

(2356)SQLite多线程下的并发操作_飞翔的种子_百度空间 SQLite多线程下的并发操作 这两天一直在捣鼓SQLite数据库,基本的操作就不说了,比较简单,打算有空的话另起一篇博文简单总结一下。 这里主要想探讨一下多路并发下的数据库操作 SQLite作为一款小型的嵌入式数据库,本身没有提供复杂的锁定机制,无法内部管理多路并发下的数据操作同步问题,...

JAVA连接SQLServer

昨天讲了JDBC,JDBC的作用本来就是用来连接数据库的,今天老师把这个知识点扩张了一下。 今天老师讲了怎么给数据库发收信息。 想要给数据库发送信息,你得有个数据库(我用的是SQLServer2008) 创建数据库: create database oa --创建数据库 create table tt1(--创建表 id int iden...

Postgresql pg_dump

pg_dump 命令详解 参数 描述 -h 指定服务器名称 -p 指定端口 -U 指定要连接的用户名 -w/--no-password 从不提示密码 -W/--password 强制pg_dump在连接到一个数据库之前提示密码 --role=rolename 该设置会导致在连接到数据库时发布一个set role rolename...

(转)字符编码笔记:ASCII,Unicode和UTF8

今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。 下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。 1. ASCII...