MySQL 如何处理超出范围的数值?
MySQL数字值超出列数据类型的允许范围时,处理方式取决于以下方式中的SQL模式 –
(A) 启用SQL严格模式 - 启用严格SQL模式时,MySQL在输入超出范围的值时返回错误。在这种情况下,部分或所有值的插入失败。
例如,我们创建了一个具有TINYINT和UNSIGNED TINYINT作为列数据类型的两个列的表。
mysql> Create table counting(Range1 Tinyint, Range2 Tinyint Unsigned);
Query OK, 0 rows affected (0.14 sec)
现在,使用以下命令,我们启用了严格SQL模式。
mysql> Set SQL_MODE ='traditional';
Query OK, 0 rows affected (0.00 sec)
现在,如果我们尝试将超出范围的值插入列中,则MySQL会反映出错误,并且两个插入都失败了,可以通过以下查询检查 –
mysql> Insert into Counting(Range1, Range2) Values(256,256);
ERROR 1264 (22003): Out of range value for column 'Range1' at row 1
mysql> Select * from counting;
Empty set (0.00 sec)
(B) 禁用SQL严格模式 - **** 当限制性SQL模式被禁用时,MySQL会将值裁剪到该列数据类型的适当端点,并积累结果值。 MySQL反映警告,这是由于剪辑引起的列分配转换的结果。
例如,如果我们在禁用SQL严格模式之后将值插入列中,MySQL将反映出警告并存储将其修剪到适当端点后的值。可以通过以下查询理解-
mysql> Set SQL_MODE = '';
Query OK, 0 rows affected (0.00 sec)
mysql> Insert Into Counting(Range1,Range2) values (256,256);
Query OK, 1 row affected, 2 warnings (0.02 sec)
mysql> Show Warnings;
+---------+------+-------------------------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------------------------+
| Warning | 1264 | Out of range value for column 'Range1' at row 1 |
| Warning | 1264 | Out of range value for column 'Range2' at row 1 |
+---------+------+-------------------------------------------------+
2 rows in set (0.00 sec)
mysql> Select * from Counting;
+--------+--------+
| Range1 | Range2 |
+--------+--------+
| 127 | 255 |
+--------+--------+
1 row in set (0.00 sec)
阅读更多:MySQL 教程