(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 1mysql> 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 如何处理超出范围的数值?的详细内容。
