问题描述
最近在数据库升级后,发现有个语句使用to_date(‘2022-01-11 11:22:33’,‘yyyy-mm-dd’)这样格式报错:”非法的时间日期类型数据“。
原因分析
通过查看两个对应版本的手册,查找发现在新版本中对于to_date转换的字符串数据的默认处理比较严格。通过DATETIME_FAST_RESTRICT参数来控制date的格式为FAST格式时,to_date中字符串是否允许带时间。默认该参数不允许带时间,带时间会报错。
以前这块处理比较宽松,新的版本中DATE默认FAST格式(默认年月日),字符串转为date的时候,要求更严格,默认为1,不允许年月日字符串带时间。设置为0之后,允许带时间,可以支持to_date(‘2021-11-16 11:15:00’,‘yyyy-mm-dd’) 这种格式的语句
处理办法
修改DATETIME_FAST_RESTRICT参数值为0。语句如下:
sp_set_para_value(1,‘DATETIME_FAST_RESTRICT’,0);
总结
1、在老版本特别是2021年4月之前的版本,在进行版本升级时需要注意一下可能会遇到这个问题。
2、在从MySQL迁移到达梦的系统,也需要关注下这个参数,可以调整为0。
当然,如果业务系统使用过程中没有遇到问题,可以不用修改该参数。