mysql 提供了 decimal(m, n) 这个类型,类比 java 的 BigDecimal
,不过需要指定整数位数 m,小数位数 n。
如果是unsigned decimal 类型,既非负数,需要设置 mysql 的 sql_model
为 STRICT_TRANS_TABLES
。
操作
建表语句如下:
CREATE TABLE `asset` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`money` decimal(12, 8) unsigned NOT NULL DEFAULT '0.0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
由于 money
字段是非负 decimal,所以不能成功设置将小于 0 的值
SET SESSION sql_mode = 'STRICT_TRANS_TABLES';
UPDATE asset SET money = -1;
此时会报
Error : Out of range value for column 'money' at row 1