ERROR 1264 (22003): Out of range value for column 'total_amount' at row 1

ERROR 1264 (22003): Out of range value for column ‘total_amount’ at row 1

说明:出现此异常的原因是因为超出mysql decimal设置的取值范围了。

首先了解一下mysql的decimal

一 DECIAML是什么

DECIMAL在MYSQL中是一种数据类型,相当于VARCHAR之类的。它能够精确的保存数据的小数位,所以常用于记录金额相关的数据,因为浮点型是有误差的。

那么,DECIMALBIGDECIMAL是什么关系呢?

说实话,他们并没有什么关系,decimal是mysql的一种数据类型,BigDecimal是java的一个类。硬要说的话,decimal常用于表示金额,可具体到精确的小数位;BigDecimal常用于金额的计算,不会出现误差,比如double类型的 1D - 0.9D 计算结果并不是0.1D 而是 0.09999999999999998D…

二 DECIAML取值范围

相信使用过的朋友,都知道decimal是长下面这样的 :

DECIMAL(a, b)

关于a 和 b ,说得容易理解些,

  • a表示整数位,取值范围是[1, 65]
  • b表示小数位,取值范围是 [0, 30]

举个栗子:

decimal(4, 2)	//取值范围是 [-99.99, 99.99]
decimal(5, 2)	//取值范围是 [-999.99, 999.99]
decimal(10, 3)	//取值范围是 [-9999999.999, 9999999.999]

相信聪明的你,也发现了吧。a代表(整数位+小数位)最大位数,b代表小数位最大位数,进而构成其取值范围。

以上内容均是本人亲测,如下所示(money->decimal(10, 3)):
ERROR 1264 (22003): Out of range value for column 'total_amount' at row 1_第1张图片

三 DECIMAL如何修改取值范围

上面说了这么多,也没说如何解决最开始的问题啊。
别急别急,马上就处理。答案大家都知道,就是增大其取值范围,关键在于SQL语句如何写

其实很简单

  1. 直接在相关工具(我这里是navicat),里面打开对应的
  2. 然后点击设计表,直接手动修改即可
  3. 在保存之前,点击SQL预览,复制SQL语句
  4. 到服务器连接MYSQL进行修改就可以了。

好了,就这样。希望能对小伙伴有所帮助~

你可能感兴趣的:(随笔)