MySQL:无符号整数列插入负数会发生什么?


#MySQL 笔记


结论:

  1. 非严格模式下,会存储为 0 。
  2. 严格模式下,报错。

注意,在现实业务中,非严格模式下的行为是不能接受的。

验证:

在 mysql 5.6.40 版本验证。

创建表:

CREATE TABLE `test_table` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `num` bigint unsigned NOT NULL,
  PRIMARY KEY(`id`)
) ENGINE=InnoDB CHARSET=utf8mb4;

插入负数、正数:

INSERT INTO `test_table` (num) VALUES(-1);
INSERT INTO `test_table` (num) VALUES(99);
INSERT INTO `test_table` (num) VALUES(-999);

查询数据:

mysql> select * from test_table;
+----+-----+
| id | num |
+----+-----+
| 1  | 0   |
| 2  | 99  |
| 3  | 0   |
+----+-----+

** 严格模式下呢?会报错。见下面的测试:**

mysql> SET sql_mode = 'STRICT_TRANS_TABLES';
mysql> INSERT INTO `test_table` (num) VALUES(-1);
(1264, u"Out of range value for column 'num' at row 1")


( 本文完 )