开发避坑短篇(11):Oracle DATE(7)到MySQL时间类型精度冲突解决方案
异常信息
[Err] [Dtf] 1426 - Too-big precision 7 specified for 'CREATE_TIME'. Maximum is 6.
异常背景
用Navicat的数据传输功能进行oracle的数据表迁移到到mysql时报错。
异常分析
oracle的DATE类型的长度是7位,而mysql的datetime类型的长度最多6位,所以无法导入。
解决办法
将oracle的DATE类型的时间字段修改为timestamp,并且长度修改为6,保存后即可传输成功。
备注:
Oracle的DATE数据类型存储日期和时间值,其精度固定为秒(second),不支持毫秒、微秒或更小的单位。DATE 字段的长度固定为 7 个字节。
若需更高精度(如毫秒或纳秒),应使用TIMESTAMP类型,其默认精度为微秒(6位),可扩展至纳秒(9位)。TIMESTAMP类型默认 11 字节。
所以DATE(n) 和 TIMESTAMP(n) 类型的长度含义是不同的,DATE(n) 字段的n是指占用空间的大小; TIMESTAMP(n) 中的n是指小数秒的精度,如2023-04-01 12:00:00.123456,00.123456秒,小数秒精确到小数点后6位。