mysql 使用 unsigned decimal 的注意事项

mysql 提供了 decimal(m, n) 这个类型,类比 java 的 BigDecimal,不过需要指定整数位数 m,小数位数 n。

如果是unsigned decimal 类型,既非负数,需要设置 mysql 的 sql_modelSTRICT_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

参考

http://www.cnblogs.com/linguoguo/p/6487097.html

你可能感兴趣的:(mysql 使用 unsigned decimal 的注意事项)