数据库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 ] )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现