解决sqlplus连接oracle乱码

Oracle数据库如果出现乱码,需要查看是否时字符集不一致导致乱码,这样解决 这条语句就可以了,TERNAL_USE提供的帮助就会使oracle绕过了子集与超集的验证,这条语句和上面的语句内部操作时完全相同的。1.首先以sysdba的身份登录上去 conn /as sysdba。以修改为ZHS16GBK字符集为例,具体字符集需要sql查询。1、如果出现乱码,需要查看是否时字符集不一致导致乱码。3.以mount(挂载方式)打开数据库。7.关闭数据库,重新启动。Oracle查看字符集。4.设置session。 阅读详情

要解决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设置.

转载:http://blog.youkuaiyun.com/nini1109/article/details/4158796

分类: Oracle
避坑指南:MTK平台Widevine L1密钥安装全流程详解(含SP META工具使用与Log分析) 本文详细解析了MTK平台实现Widevine L1认证的全流程,涵盖密钥申请、格式转换、安全烧录等关键步骤,特别针对Trustonic TEE环境下的SP META工具使用与日志分析提供实用指南。帮助开发者规避常见错误,确保DRM密钥安全部署,满足高端内容保护需求。 阅读详情

相关推荐

科研作图不发愁:手把手教你用PyMOL给蛋白-DNA互作图‘美颜’(附完整配色与标注方案)

本文详细介绍了如何使用PyMOL对蛋白-DNA互作结构图进行专业美化,包括从PDB文件加载、结构展示与标注、互作位点突出显示到高质量渲染输出的完整流程。通过具体案例(PDB ID:8SSS)演示了锌指结构域区分、关键残基标注和互作距离测量等实用技巧,帮助科研人员制作可直接用于期刊投稿的高质量示意图。

weixin_42523792的博客 552

【ORACLE】SQLPLUS出现乱码

SQLPLUS出现乱码

Edidaughter的博客 1188

CZT与FFT频谱分析方法对比:从任意频带重采样到高精度频谱分析

M = 85 % 输出点数f0 = 70 Hz % 起始频率DELF = 0.4 Hz % 频率步长频率分辨率提高到0.4 Hz分析带宽聚焦在[70, 103.6]Hz更清晰地分辨出78Hz和82Hz的频率分量。

2403_88098319的博客 1859

sqlplus连接oracle乱码

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

9359

手把手配置:用Synopsys VDK为英飞凌TC4x系列MCU做虚拟原型开发

本文详细介绍了如何使用Synopsys VDK为英飞凌TC4x系列MCU进行虚拟原型开发,涵盖开发环境搭建、关键外设虚拟化配置、AUTOSAR栈集成及虚拟调试与性能调优全流程。通过虚拟原型技术,开发者可提前6-12个月启动软件开发,显著提升汽车电子项目的开发效率。

weixin_30606461的博客 290

【MM小贴士】关于SAP系统中关税的处理方式

的运费,这部分来讲,我们关税的计价基础,就应该是货物价值+包邮到中国港口的运费,完后进行报关操作,缴纳关税,后半段从中国港口拉回到企业里面的运输费,就会做到费用里面去,而不是计入到存货成本。1、我们自己的企业和国外厂家A购买一项物资,厂家A的报价会分成几个组成部分货物本身的价值或者货物本身的价值+到国外港口的运费或者货物本身的价值+到中国港口的运费或者货物本身的价值+包邮到你们自己企业的整体运费。所以我的关税就是不确定的。重点是运费是哪一段的运费,如何结算,结算的货币,何时能够确定运费。.........

竹大的博客 9025

Oracle数据库SQL*Plus命令行执行SQL语句时,中文乱码报错解决方法

通过正确设置NLS_LANG环境变量或SQLPlus的字符集设置,您可以解决在Oracle SQLPlus中执行SQL语句时出现中文乱码和报错的问题。这些设置确保了数据库正确处理中文字符,从而使您能够顺利执行SQL操作。请根据您的具体需求和数据库配置选择适当的设置。希望本文能够帮助您顺利处理Oracle数据库中的中文字符。😊🙏Java面试技巧Java面试八股文 - 掌握面试必备知识(目录篇)Java学习路线2023年完整版Java学习路线图AIGC人工智能。

学IT,找陈寒 1万+

Ethercat学习-从站源码生成

移植平台GD32F450,从站芯片AX58100

西澳峰的博客 9217

alter session set nls_language nls_date_language

Alter session setnls_language,nls_date_language toAMERICAN,SIMPLIFIED CHINESE -- set language alter...

cuicongqian1152的博客 2294

[特殊字符] RK3588 平台上基于 Panfrost 的 Mesa 驱动编译全过程

摘要: 本文详细记录了在RK3588平台(Ubuntu 20.04 aarch64)上编译基于Panfrost的Mesa驱动的全过程。内容包括:1)系统依赖安装;2)libdrm编译;3)Mesa配置参数优化;4)LLVM 15与SPIRV工具链的安装方法;5)SPIRV-Tools版本问题的解决方案;6)最终编译命令及常见错误处理。关键点在于正确设置工具链路径(PKG_CONFIG_PATH)和版本匹配(LLVM 15对应SPIRV-LLVM-Translator v15.0.0),推荐将组件安装在/op

梁俊星的博客 940

在MATLAB和Simulink中设计并仿真一个电动汽车整车动力学模型与控制系统

电动汽车(EV, Electric Vehicle)的动力学建模与控制仿真在车辆开发过程中起着至关重要的作用。通过Simulink进行整车动力学模型的构建和控制策略的验证,可以有效评估车辆性能、优化系统设计并降低开发成本。以下是如何在MATLAB和Simulink中设计并仿真一个电动汽车整车动力学模型与控制系统的详细步骤。通过上述步骤,我们成功设计并实现了基于Simulink的电动汽车整车动力学模型与控制仿真。该系统能够模拟复杂的整车动力学行为,验证控制策略的有效性,并通过优化设计提高车辆的性能和可靠性。

xiaoheshang_123的博客 549

SQLPLUS连接Oracle中文乱码问题解决方法之一

最近几天没登录 sqlplus,突然出现中文乱码。网上解决方法挺多的,可是对于我的问题来说,并不管用。路径下的 NLS_LANG 赋值相同,并不没有解决问题。

Talk is cheap, show the code. zhangsihui.pythonanywhere.com 2633

上位机 寻边器 通讯实战

寻边器通讯接口实现 本文介绍了上位机与盖泽(Gazer)和JEL品牌寻边器的通讯接口实现方案。主要内容包括: 接口定义:创建了IAlignerOperation接口,定义了获取状态、控制运动、真空吸附等核心功能。 具体实现: 盖泽寻边器(GazerAlignerCjh):通过串口通讯,实现了回零、校准、移动位置等操作 JEL寻边器(JelAligner):同样基于串口通讯,包含错误处理、状态查询等功能 工厂模式:通过AlignerFactory工厂类根据设备品牌创建对应的实现对象。 设备加载:展示了如何在系

StevenChen的博客 375

win 10 系统 sqlplus(cmd)连接Oracle乱码问题解决,轻松两步解决

问题:在sqlplus连接oracle时,出现乱码问题。 第一步:快速定位。 第二步:切中要害,重启cmd,搞定。

New_Wang的博客 1545

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

sqlplus 连接Oracle 乱码的 解决方法

使用oracle乱码的解决方法

hugh 的博客 3218

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ssh连接oracle乱码,ssh远程登录oracle,sqlplus乱码如何解决

该楼层疑似违规已被系统折叠隐藏此楼查看此楼两台都是linux,RedHat系列的SQL> select * from emp;EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO---------- ---------- --------- ---------- -------...

weixin_39824033的博客 115

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

sqlplus连接Linux本机的Oracle数据库乱码的解决方法

在Oracle数据库所在的Linux服务器上,用sqlplus登录本机数据库,发现中文乱码,在其他机器上远程登录,中文显示正常。 经过一翻测试,作如下设置后解决问题: export NLS_LANG=AMERICAN_...

131

oracle 用Sqlplus连接的时候中文出现乱码“?胧淙胗没?”的解决方案

前言:win10下,安装完Oracle,字符集没问题,可就是cmd运行sqlplus出现“?胧淙胗没?”中文乱码,百度都是修改环境变量,但是没任何作用。 其实这个不是环境变量的问题,因为Oracle安装的字符集就没问题,而是CMD控制台的问题。 接下来就解决这个问题: 右键点击SQLplus最上方蓝色标题条: 选择“属性”——进入控制台窗口属性,勾选使用旧版控制台: 并且把“4...

wqh0830的博客 1931

Windows转到linux中,文件乱码,文件编码转换 & 解决sqlplus连接oracle乱码

转载:http://www.cnblogs.com/wanyao/p/3399269.html 最近,学习又重新开始Linux学习,所以一直在Centos中,昨天一朋友把他在Windows下写的C程序发给我,我欣然答应,本以为很快就能在我的Linux系统中运行起来。没想到出现了乱码,结果想把这个问题解决,一下子就搞了近三个小时没有解决。今天,又想起来这个问题,竟然一下子就解决了,现在把学到的一些...

weixin_33790053的博客 124

sqlplus在linux中连接oracle时中文乱码解决方案办法。

系统设置:                                          [root@xxx oracleClient]# export LANG=en_US.UTF-8   Oracle客户端读取读取的环境变量  [root@xxx oracleClient]# export NLS_LANG="Simplified Chinese_china".al32utf8  

qq_19550657的博客 634

Oracle:Sqlplus连接的时候中文出现乱码“?胧淙胗没?”的解决方案

转自:https://blog.youkuaiyun.com/qq_42192693/article/details/87922234 本人使用Sqlplus过程中出现了如下情况 这里非常感谢@Hmily@的博客,让我解决了。 首先右击左上角图标,这里博主改了图标,跟你们的可能不一样 接下来点击属性,选择选项,勾选使用旧版控制台 然后重新启动 ...

爱的叹息的专栏 610
上一篇: oracle环境变量配置
下一篇: 如何查看linux/unix查看wwn号
lucky-laoA
博客等级 码龄15年 8粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值