在 mysql 中,我们定义int类型时需要设置长度,比如int(10),那么10 到底代表什么?如果超过这个范围会出现什么问题?这篇文章我们来详细地聊一聊。
1. 含义
在数据类型如 int 后面的括号中的数字(例如 int(10))指定了显示宽度,即当使用 zerofill 属性时,系统会在数值前补零以达到指定的宽度。
- 存储空间:
int数据类型总是占用 4 字节(32 位),无论显示宽度是多少。 - 取值范围:对于有符号的
int,范围是-2147483648到2147483647;对于无符号的int unsigned,范围是0到4294967295。显示宽度不会改变这一范围。
2.zerofill的应用
当在 int 类型后使用 zerofill 时,mysql 会在数值前补零,以符合指定的显示宽度。如下示例:
create table users ( id int(10) zerofill, name varchar(50) );
插入数据:
insert into users (id, name) values (123, 'alice');
查询结果:
+-----------+-------+ | id | name | +-----------+-------+ | 0000000123 | alice | +-----------+-------+
在这个例子中,id 字段显示为 0000000123,达到 10 位宽度。
3.mysql 8.0.17 及以后的变化
从 mysql 8.0.17 版本开始,整数类型的显示宽度被废弃(deprecated),即使指定了显示宽度,默认情况下也不再影响存储或显示。这意味着:
影响:不再推荐在整数类型后指定显示宽度,如
int(10)中的10将被忽略,除非配合zerofill使用。推荐做法:直接使用
int而无需指定显示宽度,除非确实需要与现有系统兼容或有特殊需求。
为了更好地理解int,下面通过几个例子详细解释。
创建表并插入数据:
create table example (
id int(10) not null,
name varchar(50)
);
insert into example (id, name) values (1, 'john'), (123456, 'jane');
查询显示:
select * from example;
结果:
+-------+-------+ | id | name | +-------+-------+ | 1 | john | | 123456 | jane | +-------+-------+
在没有使用 zerofill 的情况下,显示宽度 10 并未影响输出格式。
使用 zerofill 的情况:
create table example_zf (
id int(10) zerofill not null,
name varchar(50)
);
insert into example_zf (id, name) values (1, 'john'), (123456, 'jane');
select * from example_zf;
结果:
+-----------+-------+ | id | name | +-----------+-------+ | 0000000001 | john | | 0000123456 | jane | +-----------+-------+
这里,id 字段根据显示宽度 10 补充了前导零。
注意:由于 mysql 8.0.17 及以后的版本中显示宽度被废弃,建议在设计数据库时避免依赖显示宽度,除非有明确的需求和兼容性考虑。
5. 总结
int(10)中的10代表的是显示宽度,它用于在与zerofill一起使用时补充前导零。- 不影响数值的存储大小或取值范围。
- 在 mysql 8.0.17 及以后版本中,整数类型的显示宽度被废弃,建议不再使用这种方式指定宽度,除非有特定需求。
到此这篇关于mysql中int(10) 的 10代表什么的文章就介绍到这了,更多相关mysql int(10) 内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论