Oracle 字符集详解与配置方法

Oracle的三个字符集

数据库字符集:该字符集是数据库的字符集,在创建数据库的时候是可以指定的。数据库创建之后,如果修改字符集,数据会乱码。如有更改需要,就得采用一些特殊方法了,下文会提出其中一种思路。
默认设置:由于数据库越来越国际化,ORACLE19C中已经默认为AL32UTF8,语言AMERICAN,区域AMERICA。所以,建议所有的数据库,全部使用默认的设置。
查询方法

select * from nls_database_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');

客户端字符集:该字符集目前未发现任何作用,有了解的朋友建议留言。该字符集由spfile文件配置,与系统环境等等无关。
查询方法

select * from nls_instance_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');

会话字符集:该字符集默认继承客户端字符集。可以被环境变量设置覆盖。该字符集影响了客户端的提示信息,日期,查询结果等的显示。只要该字符集与数据库字符集相同,就不会乱码。
注意:该字符集只影响于安装ORACLE的服务器上的客户端。远程连接的客户端并不会生效。
查询方法

 select * from nls_session_parameters where parameter in ('NLS_LANGUAGE','NLS_TERRITORY','NLS_CHARACTERSET');

Oracle19C字符集设置方法

数据库字符集设置方法
注意:以下方法,均为创建数据库时的设置,创建数据库之后需要修改,建议导出数据,重建数据库,再次导入数据。
本次实验中,Oracle安装方法为以下链接:
Oracle 19c之RPM安装
方法一:
查看该链接后,会发现数据库在安装完成之后,需要初始化。
该初始化内容实际上为创建容器数据库和可拔插数据库
查看脚本

cat /etc/init.d/oracledb_ORCLCDB-19c

可以看到创建数据库的相关参数,其中CHARSET为数据库字符集,此处可以修改为您想设置的字符集。接下来初始化既可。

export ORACLE_VERSION=19c
export ORACLE_SID=ORCLCDB
export TEMPLATE_NAME=General_Purpose.dbc
export CHARSET=AL32UTF8
export PDB_NAME=ORCLPDB1
export LISTENER_NAME=LISTENER
export NUMBER_OF_PDBS=1
export CREATE_AS_CDB=true

例如修改为ZHS16GBK字符集

export CHARSET=ZHS16GBK

方法二:
在安装完数据库后,请勿初始化。
打开以下脚本,耐心等待后,会启动图形化界面。

/opt/oracle/product/19c/dbhome_1/bin/dbca.sh

该工具可以创建修改删除容器数据库,可拔插数据。
此处不详细介绍,因为图形化已经很简单了。

客户端字符集设置方法
进入SQLPLUS,执行以下命令。

alter system set nls_language='SIMPLIFIED CHINESE' scope=spfile;#此处修改语言为简体中文
alter system set nls_territory=CHINA scope=spfile;#此处修改区域为中国
startup force;#强制重启数据库

会话字符集设置方法
会话字符集默认继承客户端字符集。在安装ORACLE的服务器上,直接继承并且生效。在远程客户端上,虽默认继承,但是并不生效,即使与数据库字符集相同,依然可能会乱码,强烈建议设置环境变量覆盖。

环境变量参数解析

Language: 显示oracle消息,校验,日期命名
Territory:指定默认日期、数字、货币等格式
Client character set:指定客户端将使用的字符集

NLS_LANG=language_territory.client character set

示例:

NLS_LANG=AMERICAN_AMERICA.US7ASCII 

AMERICAN是语言,AMERICA是地区,US7ASCII是客户端字符集

WINDOWS
添加环境变量:
变量名:NLS_LANG
变量值:AMERICAN_AMERICA.AL32UTF8

Linux
添加环境变量:
配置文件目录:

/etc/profile

添加该段到Oracle用户的配置文件中

export NLS_LANG=AMERICAN_AMERICA.AL32UTF8  

保存后,编译配置。

source /etc/profile

综上所述,最理想的状态是三个字符集统一,但是不能统一,最少也数据库字符集与会话字符集统一,才能保证正常使用,不乱码。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章