作者:俊达
在MySQL中,unsigned关键字用于声明一个字段只包含非负数(零和正整数),而不包含负数。当使用unsigned字段进行运算时,如果结果为负数,MySQL默认会产生错误,因为无法表示负数。
NO_UNSIGNED_SUBTRACTION是SQL是一个SQL MODE,它会修改MySQL的行为,允许unsigned类型的字段参与减法运算,并允许结果为负数,而不会报错。
下面是一个示例:

mysql> create table t1(a tinyint unsigned);Query OK, 0 rows affected (0.01 sec)mysql> insert into t1 values(100);Query OK, 1 row affected (0.01 sec)mysql> select a-1 from t1;+------+| a-1|+------+| 99 |+------+1 row in set (0.00 sec)
-- 默认情况下,unsigned数字参与到减法运算中,如果结果为负数,SQL会报错。mysql> set sql_mode='';Query OK, 0 rows affected (0.00 sec)mysql> select 1-a from t1;ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(1 - `test_sqlmode`.`t1`.`a`)'

在SQL_MODE中加入NO_UNSIGNED_SUBTRACTION后,运算结果可以为负数。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw