小整数类型长度
答
“在查询”验证是可以做到这样的:
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table (year INT NOT NULL);
INSERT INTO my_table SELECT 2016 FROM (SELECT 1) n WHERE 2016 BETWEEN 0 AND 9999;
Query OK, 1 row affected (0.00 sec)
SELECT * FROM my_table;
+------+
| year |
+------+
| 2016 |
+------+
INSERT INTO my_table SELECT 20161 FROM (SELECT 1) n WHERE 20161 BETWEEN 0 AND 9999;
Query OK, 0 rows affected (0.00 sec)
SELECT * FROM my_table;
+------+
| year |
+------+
| 2016 |
+------+
答
输入从MySQL manual:
MySQL支持用于选择指定的整数数据类型的显示宽度括号中的类型base关键字以下的延伸部。例如,INT(4)指定一个显示宽度为四位的INT。
显示宽度确实是不是约束可存储在列中的值的范围。它也不会阻止比列显示宽度更宽的值被正确显示。例如,指定为SMALLINT(3)的列的常用SMALLINT范围为-32768至32767,并且三位数所允许的范围之外的值全部使用三位以上的数字显示。
因此,您不能仅限制mysql中的4位数值。而MySQL不支持自定义的CHECK
约束。但是你可以创建像this这样的触发器并检查里面的值。请注意,自MySQL 5.5以来,SIGNAL
起作用。
+0
我认为OP已经知道这一点。 – Strawberry
你可以做的是在应用程序代码,或者您的查询 – Strawberry
这应该做的伎俩。结果与预期结果有何不同? – Mureinik
@Mureinik括号中的数字与数据类型将接受的值范围没有关系。 – Strawberry