Oracle-Linux-SqlPlus-Garbled-Code-1

Oracle 数据库 sqlplus 乱码问题

问题的引出

当我们 sqlplus 进入数据库,所有的提示都是问号 或者是乱码,说明我们客户端的字符集不是英文 , 并且我们终端的字符集 与 sqlplus 建立数据库连接的字符集不同。

Oracle server 端字符集

1
2
3
select userenv('language') from dual;

SELECT * FROM V$NLS_PARAMETERS WHERE PARAMETER ='NLS_LANGUAGE';

解决方式 说明

1
2
1、我们只需要将 sqlplus 中 会话的字符集更改为 英文即可,不过这需要你习惯英文。
2、如果你不习惯英文界面,那么你就需要将终端的字符集 和 sqlplus 数据库 session 会话的字符集更改一致。

1、Linux bash 脚本环境下,设置 NLS_LANG 环境变量

常用的字符集

1
2
SIMPLIFIED CHINESE_CHINA.UTF8
AMERICAN_AMERICA.AL32UTF8
1
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.UTF8"

2、Window 命令行下面的配置

1
2
3
4
5
6
# 常用中文字符集
set NLS_LANG=SIMPLIFIEDCHINESE_CHINA.ZHS16GBK
# 常用unicode字符集
set NLS_LANG=american_america.AL32UTF8
# 可以通过修改注册表键值永久设置, 这边的 xx 代表的是 Oracle 的版本号
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG

3、在 sqlplus 会话中临时更改环境变量的值(我为了方便 更改 美国的字符集)

常用的字符集

1
SIMPLIFIED CHINESEAMERICAN
1
alter session set nls_language=american;

4、永久生效,直接更改数据库的 NLS_LANGUAGE 参数,须重启才能生效

1
alter system set nls_language=american scope=spfile;

Contents
  1. 1. Oracle 数据库 sqlplus 乱码问题
    1. 1.1. 问题的引出
    2. 1.2. Oracle server 端字符集
    3. 1.3. 解决方式 说明
      1. 1.3.1. 1、Linux bash 脚本环境下,设置 NLS_LANG 环境变量
      2. 1.3.2. 2、Window 命令行下面的配置
      3. 1.3.3. 3、在 sqlplus 会话中临时更改环境变量的值(我为了方便 更改 美国的字符集)
      4. 1.3.4. 4、永久生效,直接更改数据库的 NLS_LANGUAGE 参数,须重启才能生效
|