阿开 2021-03-27 23:34:34 11691 0 0 0 0

发现 mysql 定义的数据类型不管用,定义的整数 1 位,也可以插入多位数字

create table t1 (id int(1));
insert into t1 (id) values (-1);
insert into t1 (id) values (-123);
insert into t1 (id) values (-12345);
insert into t1 (id) values (23);
insert into t1 (id) values (123);
insert into t1 (id) values (12345);

完全不报错,可以正常写入! 这是为啥,这么不严谨么,难道是为了容错!

+++

你定义的是一个 int 整形的数据,其存储范围:- 2147483648 至 2147483647 或 0 至 4294967295,这个是固定的而不是你定义的,括号中的是显示长度,你把它理解为了“我定义它只能存储 1 位的数字””。

+++

是啊,我是这样理解的,难道不是这么理解么。

如果不是,那个 1 是不是就没意义了呢。

+++

mysql 只有前缀带 var 的才允许你定义数量,其他的都是固定的。

+++

2 楼说的有一点纠正:int(M) M 是“最小显示长度”,可以配合 zerofill 属性使用 int(2) 1=>01 11=>11 111=>111

+++

那个是显示位宽

你应该用 tinyint smallint int bigint 这些

+++

#2#7#8 说的都对,我查了一下,这个貌似是 MYSQL 设计留下来的没啥用的东西,只在字段有 zerofill 的时候,查询结果数字如果不足位数,前面补 0

比如 id int(6) zerofill,你存 1,123,1234 查询出来的结果就是 000001,000012,001234

比如 id int(2) zerofill,你存 1,123,1234 查询出来的结果就是 01,12,1234

+++

括号里显示的是指显示的位数,不是指能存储的位数

面试常考


【版權聲明】
本文爲原創,遵循CC 4.0 BY-SA版權協議!轉載時請附上原文鏈接及本聲明。
原文鏈接:https://tdlib.com/am.php?t=kRLL5HGxyDay
Tag: Mysql 数据类型
我也要發一個   ·   返回首頁   ·   返回[Mysql]   ·   前一個   ·   下一個
歡迎評論
未登錄,
請先 [ 註冊 ] or [ 登錄 ]
(一分鍾即可完成註冊!)
返回首頁     ·   返回[Mysql]   ·   返回頂部