【问题标题】:Strange ' Data truncation: Out of range value' error for Decimal column小数列的奇怪“数据截断:超出范围值”错误
【发布时间】:2016-10-21 00:29:49
【问题描述】:

我在 mysql 表中有一个列 foo,其类型为 DECIMAL (10,10)

如果我尝试在其中插入一条值为 foo 为 100.0 的记录,则会产生错误“数据截断:第 1 行的列 'foo' 的值超出范围`

我做错了什么 - 10,10 不是指小数点前后最多 10 位数字,应该允许这个数字吗?

【问题讨论】:

  • 十进制 10,10= 最多 10 个位置,存在 10 个小数。尝试 10,2 或 20,10。

标签: mysql


【解决方案1】:

不是,第一个值表示总位数,第二个表示逗号后面的位数,

所以,

20,10 = 20 Digits and 10 after comma => 10, before and ten after

压缩的“精确”定点数。 M 是总位数(精度),D 是小数点后的位数(小数位数)。小数点和(对于负数)“-”符号不计入 M。如果 D 为 0,则值没有小数点或小数部分,并且在 INSERT 时,值将四舍五入到最接近的 DECIMAL。 DECIMAL 的最大位数 (M) 为 65。支持的最大小数位数 (D) 为 30。如果省略 D,则默认为 0。如果省略 M,则默认为 10。

【讨论】:

  • 感谢您提供宝贵的信息
【解决方案2】:

如果你想要 10 位数字和 10 位小数,你需要

DECIMAL (20,10)

第一个值定义总位数..第二个是小数点后的最大位数

【讨论】:

  • 不应该 10,10 仍然意味着应该接受 100.0 吗?
  • 即使 30,30 100.0 也不被接受。可能这里发生了其他事情
  • 30,30 然后 30,30 表示小数点后只有 30 位.. 没有整数部分,100,0 表示没有小数部分..所以你尝试 0.00000000--> 30 不起作用。 . 因为你有一个整数 (0.) 值.. 如果你尝试 1111111->100.1 不要工作你有一个十进制数字..
猜你喜欢
  • 2011-12-31
  • 2016-11-30
  • 2015-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-26
  • 2013-07-05
  • 2013-10-29
相关资源
最近更新 更多