达梦:dts工具迁移mysql decimal(65,30)的字段,报精度超出定义

当迁移MySQL的decimal(65,30)字段到达梦数据库时,由于达梦decimal最大精度为38,会导致精度超出定义的错误。文章建议,为避免此问题,应将MySQL的decimal调整为dec(38,3),但同时提醒这可能影响小数部分的精度。实际操作需考虑数据的具体情况。
摘要由CSDN通过智能技术生成

 
本文旨在分享迁移MySQL decimal字段​​​​​​​时遇到“精度超出定义”问题时,如何理解MySQL和达梦对于decimal 等这一类数值数据类型。

1.了解达梦的数值数据类型定义 

​​​​​​​​​​​​​​NUMERIC 类型

语法:NUMERIC[(精度 [, 标度])]

功能:NUMERIC 数据类型用于存储零、正负定点数。其中:精度是一个无符号整数,定义了总的数字数,精度范围是 1 至 38。标度定义了小数点右边的数字位数。一个数的标度不应大于其精度,如果实际标度大于指定标度,那么超出标度的位数将会四舍五入省去。例如:NUMERIC(4,1)定义了小数点前面 3 位和小数点后面 1 位,共 4 位的数字,范围在-999.9 到 999.9。所有 NUMERIC 数据类型,如果其值超过精度,DM 会返回一个出错信息,如果超过标度,则多余的位会被截断。

如果不指定精度和标度,缺省精度为 38,标度无限定。

2.实际案例分享:

我之前遇到过mysql deciamal(65,30)的,按自动转的话,达梦这边是dec(38,30) ,默认的转换,如果遇到整数位大于8的话,就存不下,会报:精度超出定义

mysql decimal(65,30):mysql的最大精度是65,65-30=35,说明mysql的整数部分是35位,小数点右边是30位小数。


dec(38,30):达梦最大精度只能到38,38-30=8, 说明达梦的整数部分是8位,小数点右边是30位小数。

如果为了满足整数位的位数,不引起“精度超出定义”​​​​​​​的报错,对于mysql的decimal(65,30),达梦这边应该转成dec(38,3),就是35个整数位,3个小数位。

但实际也不能直接这个去设置,还是要看数据

因为直接这么转,小数位的数值也很重要的话,会失去数值的精度。

欢迎交流指导~

~~~~~~~~~~~~~~~分享完毕~~~~~~~~~~~~~~~~

更多内容,请访问达梦社区地址:https:eco.dameng.com


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值