注册
达梦:dts工具迁移mysql decimal(65,30)的字段,报精度超出定义解决办法
培训园地/ 文章详情 /

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

Vivian 2023/05/19 2025 0 0

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

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

numeric类型

功能:NUMERIC 数据类型用于存储零、正负定点数。
其中,精度是一个无符号整数,定义了总的数字数,精度范围是 1 至 38。
标度定义了小数点右边的数字位数。

一个数的标度不应大于其精度,如果实际标度大于指定标度,那么超出标度的位数将会四舍五入省去。

例如:NUMERIC(4,1)定义了小数点前面 3 位和小数点后面 1 位,共 4 位的数字,范围在-999.9 到 999.9。
所有 NUMERIC 数据类型,如果其值超过精度,DM 会返回一个出错信息,如果超过标度,则多余的位会被截断。

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

2.实际案例分享

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

image.png

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个小数位。

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

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

~~欢迎交流指导~

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服