在MySQL中,溢出只会产生警告,MySQL会破坏您提供的数据:
mysql> create table tmp(data tinyint primary key);
Query OK, 0 rows affected (7.83 sec)
mysql> insert into tmp set data = 200;
Query OK, 1 row affected, 1 warning (2.27 sec)
mysql> select * from tmp;
+------+
| data |
+------+
| 127 |
+------+
1 row in set (0.00 sec)
这是一个很大的问题,特别是在通过编程语言使用MySQL时,其中一个(通常)不会检查任何MySQL警告。这可能不仅会导致数据损坏,还会导致隐藏的数据损坏,并且可能仍未检测到 - 这是数据库中可能发生的最糟糕的事情之一。
有没有办法配置MySQL以便溢出导致错误(类似于语法错误)而不仅仅是警告?
答案 0 :(得分:1)
你必须激活严格的SQL模式:
If strict SQL mode is enabled, MySQL rejects the out-of-range value with an error, and the insert fails, in accordance with the SQL standard.
If no restrictive modes are enabled, MySQL clips the value to the appropriate endpoint of the range and stores the resulting value instead.