一、 常见面试题
- 整型都有哪些基础类型,各占几个字节
- tinyint, smallint, mediumint, int, bigint: 1 2 3 4 8
- int(n) 是什么意思,什么时候用到
- 指定显示位宽,需配合 zerofill 使用(不够位宽则在前面补0),
不改变存储大小(存储大小由 xxint 指定,不由 int(n) 指定)
- 如果插入的数据位数少于指定位数,则select 的时候会补0
- 如果插入的数据位数大于指定位数,则原样展示
- 指定显示位宽,需配合 zerofill 使用(不够位宽则在前面补0),
二、实操验证
- 执行
create TABLE test_a (
aa tinyint, -- 一个B,有符号,取值范围 正负 127
ad int,
ba int unsigned, -- 指定了无符号类型,如果插入 负数 则报错
bb int(4), -- 指定显示宽度,一般和 zerofill 一起用,否则达不到效果
bc int(4) zerofill, -- 指定了显示宽度,如果实际数字不够位宽,则填充0,一般用于报表对齐
bd int(4) unsigned zerofill -- 等同于 bc
);
结果:
- 使用了 zerofill,则类型默认转为 unsigned
- 如果 int(n) 不配合 zerofill,则无效
- 执行
insert into test_a(aa, ad, ba, bb, bc, bd) values(5, 34, 23, 22, 22, 22);
insert into test_a(aa, ad, ba, bb, bc, bd) values(5, 34, 23, 43, 12, 34);
insert into test_a(aa, ad, ba, bb, bc, bd) values(5, 34, 23, 433434, 123434, 34);
结果:
- 如果插入的数据位数少于指定位数,则select 的时候会补0
- 如果插入的数据位数大于指定位数,则原样展示
三、整型建表建议
- 选择类型(值范围够用的前提下,尽量选小类型)
- 确认有无符号类型
- 确认是否需要填0对齐
create TABLE test_b (
aa tinyint,
ab smallint,
ac mediumint,
ad int,
ae bigint, -- 以上都是有符号类型,可以存 正负数
ba int unsigned, -- 指定了无符号类型,如果插入 负数 则报错
bb int(4), -- 指定显示宽度,一般和 zerofill 一起用,否则达不到效果
bc int(4) zerofill -- 指定了显示宽度,如果实际数字不够位宽,则填充0,一般用于报表对齐
bd int(4) unsigned zerofill -- 等价 bc
);
- 参考:https://blog.csdn.net/qq_43145072/article/details/127166717