什么是在处理溢出时使用NO_UNSIGNED_SUBTRACT SQL模式的用途?

什么是在处理溢出时使用NO_UNSIGNED_SUBTRACT SQL模式的用途?

如果启用了SQL严格模式,那么在一个无符号类型和一个有符号类型的整数之间进行减法时,默认情况下会产生一个无符号的结果。但是如果结果是负数,则MySQL会报错。可以通过以下示例来观察:

mysql> SET sql_mode = '';
Query OK, 0 rows affected (0.00 sec)

mysql> Select CAST(0 AS UNSIGNED) -1;
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '(cast(0 as unsigned) - 1)'

上述查询后的错误显示它是数值算术表达式溢出的结果。

现在,可以通过启用NO_UNSIGNED_SUBTRACTION SQL模式来处理它。启用此模式后,结果将会是-1而不是一个错误。

mysql> Set sql_mode = 'NO_UNSIGNED_SUBTRACTION';
Query OK, 0 rows affected (0.00 sec)

mysql> Select CAST(0 AS UNSIGNED) -1;
+------------------------+
| CAST(0 AS UNSIGNED) -1 |
+------------------------+
|                     -1 |
+------------------------+
1 row in set (0.00 sec)

阅读更多:MySQL 教程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程