对超出列数据类型允许范围的 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 如何处理超出范围的数值?的详细内容,更多请关注每日运维网(www.mryunwei.com)其它相关文章!