数据库NLS对日期展示的影响

1.数据库的NLS

本来想写成数据库的字符集的,但是感觉NLS(国家语言支持)更加的贴切,因为NLS包含了三部分,而不仅仅是数据库的字符集。

1.1.NLS的组成

数据库的NLS有三部分组成 语言_地区.编码,例如AMERICAN_AMERICA.AL32UTF8。

AMERICAN:美式英语,指的是语言(例如TRADITIONAL CHINESE),用于数据库消息,例如数据库的报错等。

AMERICA:美国,指的是地区(例如TAIWAN),用于日期,货币,数字,排序等,例如英语中星期一显示MON,而在中国,则显示为星期一。

AL32UTF8:字符集,AL是ALL的意思,32指的是用四个字节来存储字符串类型的字段(例如char,varchar2,clob,long等),同时也用于数据库对象的名称,定义以及存储过程的编码等。

1.2.NLS的设定

NLS分为服务器端和客户端

服务器端的NLS是在数据库创建的时候指定的,如下图。

NLS客户端的设定是通过设置环境变量NLS_LANG指定的,将下面这句话放入oracle的环境变量中即可

export NLS_LANG="TRADITIONAL CHINESE"_TAIWAN.AL32UTF8

WINDOWS下客户端的设定分为两类,一类是sqlplus的,另一类是toad,oracle sql developer等客户端的

sqlplus:windows安装oracle客户端的时候,oracle客户端会根据windows的本地语言设置NLS并写入注册表中(HKEY_LOCAL_MACHINE->SOFTWARE->WOW6432Node->ORACLE->KEY_OraClient12Home1_32bit),如果是64位,应该直接在SOFTWARE下

toad等客户端默认使用UTF8,无需设置(也设置不了),不会出现乱码

1.3.NLS的查看

NLS分为服务器端和客户端的,服务器端就是在安装数据库的时候指定的。客户端,比如我在中国,查询一个美国部署的数据库,我就可以设定我客户端的NLS,让数据适应我的本地格式。

查看数据库(服务器)的NLS设定:

select * from NLS_DATABASE_PARAMETERS;

查看当前SESSION(客户端)的NLS设定:

select * from NLS_SESSION_PARAMETERS;
--或者
select * from v$nls_parameters;

1.4.NLS影响日期的展示

to_date函数的语法TO_DATE( string1, [ format_mask ], [nls_language ] )

原文地址:https://www.cnblogs.com/monkey6/p/14581559.html