当前位置:   article > 正文

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

达梦decimal

 
本文旨在分享迁移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


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/531353
推荐阅读
相关标签
  

闽ICP备14008679号