int(1)
和 int(10)
到底有什么区别?int(10)
,结果导致数据库字段设计上出现了冗余,浪费了不少空间。今天,我就来带大家一起深入挖掘这个问题,搞清楚其中的玄机。1. 领导对 int(1)
的疑虑
int(1)
字段产生了疑虑。int(1)
是不是存储的数值只能在 0 到 9 之间?它是不是就是一个单独的数字啊?” 确实,很多人看到 int(1)
就觉得它的数值范围应该非常有限。于是我开始思考,为什么会有这样的误解?后来我才明白,原来大家误把 int(n)
里的 n
当成了数值的“限制”,觉得 int(1)
只能存储个位数,int(10)
就能存储更大的数字了。实际上,int(n)
中的 n
只是影响字段的显示宽度,并不限制字段能够存储的数值范围。2. int(n)
语法解析
int(n)
的语法。其实在 SQL 中,int(n)
表示一个整数类型,其中 n
只是用来定义显示宽度的,并不影响数据的存储大小和数值范围。这一点可能会让大家有些困惑,因为看起来像是 n
会决定数字的长度。int(1)
类型的字段,它并不是说这个字段只能存储一个数字。实际上,int
的存储大小是固定的,不管你写成 int(1)
还是 int(10)
,它们都会占用相同的空间(4 字节)。这个 n
只是影响数据的显示格式,而不是数据的存储。你仍然可以存储非常大的数字,int(1)
并不会限制它只能存 0 到 9 之间的值。int(1)
和 int(10)
字段中插入了最大值。实际操作时,你会发现它们的表现是一样的。比如,插入一个 2147483647
的整数,两个字段都能接受这个数值,虽然我们看到显示格式的不同。-- 创建一个表格,包含一个 int(1) 和 int(10) 的字段
CREATE TABLE test_table (
col1 INT(1),
col2 INT(10)
);
-- 插入最大值
INSERT INTO test_table (col1, col2)
VALUES (2147483647, 2147483647);
-- 查询结果
SELECT * FROM test_table;
2147483647
。你会惊讶地发现,int(1)
也能存储这么大的数字!这就是因为 int(n)
中的 n
只是影响显示,而不影响存储。3. zerofill
的作用
int(n)
中的 n
到底有什么用呢?其实,它和 zerofill
配合使用时,才会真正展现它的作用。zerofill
是 MySQL 提供的一种格式化选项,它会将数值格式化为指定的宽度,并用零填充。int(n)
和 zerofill
一起时,字段会显示为一个固定的宽度,缺少的部分用零来补充。int(4) unsigned zerofill
字段,它的作用就是无论你插入多少位数的数字,都能保证显示为 4 位数,前面不足的部分会自动填充为零。来看一下示例:-- 创建表格
CREATE TABLE test_table_zerofill (
col1 INT(4) UNSIGNED ZEROFILL
);
-- 插入数据
INSERT INTO test_table_zerofill (col1)
VALUES (5), (56), (123), (9876);
-- 查询结果
SELECT * FROM test_table_zerofill;
+--------+
| col1 |
+--------+
| 0005 |
| 0056 |
| 0123 |
| 9876 |
+--------+
int(4)
的字段会把数值补充为四位,少的部分用零来填充。这在某些场景下非常有用,比如我们常见的订单号、流水号等场景,固定宽度的数字更加整齐,也方便排序和显示。4. 总结
int(1)
和 int(10)
的区别,实际上就是一个显示宽度的问题,而不是存储能力的差异。它们的存储大小和数值范围是一样的,都是 4 字节,存储的整数范围是 -2147483648
到 2147483647
。而 int(n)
中的 n
只是告诉 MySQL 如何显示这个数字,影响的是格式,而不是实际存储的数值大小。zerofill
就能派上用场。它将使得数字变得更加整齐,特别是在你需要规范化显示的时候,像银行账户号码、流水号等场合,都非常有用。n
的值,选择 int
类型就好。别让这些显示细节影响了数据库设计的效率和可读性。-END-
ok,今天先说到这,老规矩,看完文章记得右下角给何老师点赞,
最后送给大家一个福利,我这里有一份搞副业的教程,这份教程里有100+个搞钱小项目:
网盘拉新核心玩法、公众号运营变现、小红书虚拟资料引流等,现在扫码加我微信,即可领取这份副业教程。
添加时备注:副业