这段代码:
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);
Run Code Online (Sandbox Code Playgroud)
返回错误:
Error Code: 1264. Out of range value for column 'multiplier' at row 1
Run Code Online (Sandbox Code Playgroud)
为什么?逗号之前只有9位数字,而列应该工作到18位数 - 或者我在这里遗漏了什么?谢谢.
Abh*_*rty 25
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个字节.六个小数位需要3个字节.