1、数据库字符集、会话字符集、客户端字符集等概念
NLS_DATABASE_PARAMETERS lists permanent NLS parameters of the database. ##数据库字符集,创建数据库时指定的,不建议做修改
V$NLS_PARAMETERS contains current values of NLS parameters. ##当前会话字符集
1.1、数据库字符集
数据库字符集概念:数据库字符集包括两个字符集:数据库字符集、国家字符集,都是在创建数据库的时候指定
查看数据库字符集:
1.2、会话字符集
会话字符集概念:当前会话的字符集,sqlplus会读取os环境变量nls_lang的值,因此受客户端nls_lang的控制,所以没有特殊设置,将与nls_instance_parameters一致。可通过环境变量或alter session进行修改
1.3、客户端字符集
客户端字符集概念:NLS_LANG 参数定义客户端的字符编码方案。
在客户端,通过设置环境变量来定义客户端的字符集。该环境变量为如下定义:NLS_LANG=<language>_<territory>.<client character set>
<language>:用来显示Oracle消息、年月的名称(例如12月是应该显示“Dec”还是“12月”)以及默认的排序机制,对应服务器的初始化参数为NLS_LANGUAGE
<territory>:用来显示默认的日期格式、数字格式、以及货币格式等,对应服务器的初始化参数为NLS_TERRITORY。
<client character set>:客户端使用的字符集
2、如何设置正确实用的字符集?
不同的客户机可以使用不同的编码方案。客户机与服务器之间传递的数据可以在两种编码方案之间自动转换。数据库的编码方案应该是所有客户机编码方案的超集,或者与所有客户机编码方案等同。
3、修改nls_lang,从而显示中文的oracle消息
3.1、改变nls_lang的值之后,登录时,就会显示中文的日期
会话的nls_language等会立刻发生变化,但是nls_instance_parameter的lang_language没有发生变化
重启数据库,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