首页 > 解决方案 > 错误 1264 (22003):第 1 行的“金额”列的值超出范围

问题描述

使用此命令:

mysql>  insert into irctc_cap ( lid,amount,type) VALUES (296,-1000,128);

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

Mysql 版本:Ver 14.14 Distrib 5.7.19,

根据警告#1264:mysql中的超出范围错误我看到这个问题不应该出现,因为数量length为12,4

金额字段的phpmyadmin快照

标签: mysql

解决方案


如果数据类型是,这意味着总共DECIMAL(5,2)五位数字,其中两位在小数点右侧。所以你可以使用的最大值是 999.99,最小值是 -999.99。这些是您最多可以容纳五位数。

如果您不使用严格模式,则会生成警告并将您尝试使用的值截断为五位数:

mysql> insert into irctc_cap values (296,-1000,128);
Query OK, 1 row affected, 1 warning (0.02 sec)

mysql> show warnings;
+---------+------+-------------------------------------------------+
| Level   | Code | Message                                         |
+---------+------+-------------------------------------------------+
| Warning | 1264 | Out of range value for column 'amount' at row 1 |
+---------+------+-------------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from irctc_cap;
+------+---------+------+
| lid  | amount  | type |
+------+---------+------+
|  296 | -999.99 |  128 |
+------+---------+------+

如果使用严格模式,警告会变成错误:

mysql> set sql_mode=strict_all_tables;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into irctc_cap values (296,-1000,128);
ERROR 1264 (22003): Out of range value for column 'amount' at row 1

我不确定为什么 phpMyAdmin 显示错误的数据类型。

使用DESCRIBEorSHOW CREATE TABLESELECT column_type FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='irctc_cap' AND COLUMN_NAME='amount'获取列的准确定义。


推荐阅读