MySQL十进制类型超出范围错误

时间:2015-10-26 14:40:50

标签: mysql

此代码:

DROP DATABASE IF EXISTS `my_db`;
CREATE DATABASE `my_db`; 
CREATE TABLE `my_db`.`my_table` (
    `id` integer NOT NULL AUTO_INCREMENT, 
    `multiplier` decimal(18, 10) NOT NULL, 
    PRIMARY KEY (`id`)
) Engine=InnoDB;

INSERT INTO `my_db`.`my_table` (`multiplier`) VALUES (100000000.0);

返回错误:

Error Code: 1264. Out of range value for column 'multiplier' at row 1

为什么呢?逗号之前只有9位数字,而列应该工作到18位数 - 或者我在这里遗漏了什么?谢谢。

1 个答案:

答案 0 :(得分:19)

decimal(18, 10)表示十进制后10位数,小数点前8位数,而不是18位数

https://dev.mysql.com/doc/refman/5.1/en/precision-math-decimal-characteristics.html

  

例如,DECIMAL(18,9)列的两侧各有九位数字   小数点,所以整数部分和小数部分各自   需要4个字节。 DECIMAL(20,6)列有十四个整数位   和六个小数位。整数位需要四个字节   九个数字和剩余五个数字的3个字节。 6   小数位需要3个字节。