oracle数据库timestamp类型显示问题(2099年和1999年)

在Oracle11g数据库中,使用PLSQL工具时遇到TIMESTAMP类型数据显示异常,2099年的日期显示为9912年。问题源于客户端环境变量MLS_TIMESTAMP_FORMAT未正确设置。解决方案是设置该环境变量为'YYYY-MM-DD HH24:MI:SS',以确保正确显示和处理TIMESTAMP值,避免导入数据时出现错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题场景:

  线上环境数据库中某些基础数据导入进测试库中,测试功能失效,经过排查发现,测试库导入的数据均以过期,数据无效。

数据库为Oracle11g

客户端工具PLSQL

 

数据过去字段类型为TIMESTAMP类型,线上数据插入时间为“2099-01-01 00:00:00”

插入后数据库中数据显示为01-JAN-9912.00.00.000000 AM

to_char此字段显示也为2099年

至此处为任何问题

 

将数据刷入测试库中,数据库中显示“01-JAN-9912.00.00.000000 AM”

to_char数据变为1999年01月01日

在此处发生问题

 

通过网上搜索未发现怎么解决,加了个oracle的qq交流群被一大哥点醒。应该是timestamp类型显示相关问题

最后解决

为本地客户端配置环境变量:

变量名:MLS_TIMESTAMP_FORMAT     

变量值:YYYY-MM-DD HH24:MI:SS

 

PLSQL显示timestamp时对其格式读取从注册表读取,默认格式是啥俺也不清楚,估计就是“01-JAN-9912.00.00.000000 AM”这么个类型滴

配上环境变量后再显示时间戳时时根据自己配置格式显示,此时PLSQL中显示为符合本地环境变量时间戳格式的显示:2099-01-01 00:00:00

此时再将数据导出、导入将不会出现问题。

 

个人认为:

01-JAN-9912.00.00.000000 AM  此格式显示将年份仅显示后两位,故2099-01-01 00:00:00和1999-01-01 00:00:00两个日期格式化后显示相同,实际真实数值不同,仅显示相同

但是当导入时,对于时间戳01-JAN-9912.00.00.000000 AM   系统认为是一个具体指,而非显示的值,   系统默认值01-JAN-9912.00.00.000000 AM的具体值应为1999-01-01 00:00:00

 

纯属个人理解,未曾深入研究,如有不对之处,还请指出,谢谢

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值