天天看点

oracle数据库的字符集

一、oracle数据库的字符集

1、数据库字符集、会话字符集、客户端字符集等概念

NLS_DATABASE_PARAMETERS lists permanent NLS parameters of the database.  ##数据库字符集,创建数据库时指定的,不建议做修改

V$NLS_PARAMETERS contains current values of NLS parameters.  ##当前会话字符集

1.1、数据库字符集

数据库字符集概念:数据库字符集包括两个字符集:数据库字符集、国家字符集,都是在创建数据库的时候指定

查看数据库字符集:

oracle数据库的字符集

1.2、会话字符集

会话字符集概念:当前会话的字符集,sqlplus会读取os环境变量nls_lang的值,因此受客户端nls_lang的控制,所以没有特殊设置,将与nls_instance_parameters一致。可通过环境变量或alter session进行修改

oracle数据库的字符集

1.3、客户端字符集

客户端字符集概念:NLS_LANG 参数定义客户端的字符编码方案。

在客户端,通过设置环境变量来定义客户端的字符集。该环境变量为如下定义:NLS_LANG=<language>_<territory>.<client character set>

<language>:用来显示Oracle消息、年月的名称(例如12月是应该显示“Dec”还是“12月”)以及默认的排序机制,对应服务器的初始化参数为NLS_LANGUAGE

<territory>:用来显示默认的日期格式、数字格式、以及货币格式等,对应服务器的初始化参数为NLS_TERRITORY。

<client character set>:客户端使用的字符集

oracle数据库的字符集
oracle数据库的字符集

2、如何设置正确实用的字符集?

不同的客户机可以使用不同的编码方案。客户机与服务器之间传递的数据可以在两种编码方案之间自动转换。数据库的编码方案应该是所有客户机编码方案的超集,或者与所有客户机编码方案等同。

3、修改nls_lang,从而显示中文的oracle消息

3.1、改变nls_lang的值之后,登录时,就会显示中文的日期

oracle数据库的字符集

会话的nls_language等会立刻发生变化,但是nls_instance_parameter的lang_language没有发生变化

oracle数据库的字符集

重启数据库,nls_instance_parameter的值仍然没有改变

SQL> startup open;

ORACLE 例程已经启动。 Total System Global Area  534462464 bytes

Fixed Size                  2215064 bytes

Variable Size             247464808 bytes

Database Buffers          276824064 bytes

Redo Buffers                7958528 bytes

数据库装载完毕。

数据库已经打开。

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

------------------------------------------------------------

VALUE

--------------------------------------------------------------------------------

NLS_LANGUAGE

AMERICAN NLS_TERRITORY

AMERICA