Oracle数据库关于中文乱码问题
oracle数据库关于中文乱码问题
某些时候当我们使用远程工具(如xshell)远程连接数据库时会出现乱码情况,如下:
[oracle@ora ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Thu Mar 12 11:46:28 2020 Copyright (c) 1982, 2013, Oracle. All rights reserved. ???: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SYS@ORCL>
乱码这个地方正常应该为“连接到”或者“Connected to”
为什么这个地方会出现乱码呢?
是因为系统语言与数据库安装的语言不符导致的,比如说安装系统时候选择的是中文,而安装数据库时选择的是英文,或者说安装系统时候选择的是英文,而安装数据库时安装的却是中文,所以使用远程工具连接时候就会出现这种问题,那么就需要修改一方的语言即可正常显示。
在这里我系统安装为英文,数据库安装为中文,下列示例中修改系统语言为中文,当然也可修改数据库为英文,这里就不做演示了。
1 查询数据库编码格式
# oracle用户登录数据库
sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Thu Mar 12 11:46:28 2020 Copyright (c) 1982, 2013, Oracle. All rights reserved. ???: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SYS@ORCL>
set linesize 2000;
select * from v$NLS_PARAMETERS;
PARAMETER VALUE ---------------------------------------------------------------- -------------------------------- NLS_LANGUAGE SIMPLIFIED CHINESE NLS_TERRITORY CHINA NLS_CURRENCY ? NLS_ISO_CURRENCY CHINA NLS_NUMERIC_CHARACTERS ., NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE SIMPLIFIED CHINESE NLS_CHARACTERSET ZHS16GBK NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY ? NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE ???19??
NLS_LANGUAGE表示“语言”,NLS_TERRITORY表示“地域”,NLS_CHARACTERSET表示“字符集”,将这三个按照“语言_地域.字符集”拼接起来,就有了“SIMPLIFIED CHINESE_CHINA.ZHS16GBK”
2 修改oracle环境变量
vi .bash_profile
添加:
NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"; export NLS_LANG
source .bash_profile
3 修改连接工具的编码
将连接工具修改为Chinese Simplified(GBK)编码,以xshell为例: