A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

近期有朋友问我说mysql数据库里tinyint(1)这个1到底是什么意思啊?

于是就有了这篇文章,来给大家说一说常见字段后面带的参数都有什么意义,什么时候会用到.

注: (本人测试版本为mysql 5.7.16 及 8.0.15)

int,tinyint:
它们两个的参数意义一模一样, 下边我用int来举例:

假设我表中有一字段age 类型为int(5) 那这个5代表的其实是最小显示长度(不足则前边用0补全), 也就是说当我们给age字段设为12的时候,select查询显示应该是00012, 可是实际操作中我们发现并没有补全效果, 是这样的, 如果我们想要这个5生效, 我们还需要给age字段增加 zerofill 约束 增加完zerofill约束之后, 我们再执行查询就发现有了这个补全效果, 这个跟python 里的字符串占位 %05d 的写法比较类似

测试过程:
首先我们创建一个表test, 字段为num1,num2 类型分别为int(5), tinyint(5), 然后插入一行数据(3, 3), 查询一下看看没有什么异常.

然后我为字段num1,num2 指定zerofill 属性(当指定zerofill后, 会自动变为无符号模式: unsigned), 我们再来查询看看, 被补全了
.
char,varchar:
这两个的参数意义基本上一样,下边我用char来举例:

假设我表中有字段name, 类型为char(4) 这个4代表的就是最大字符长度, 也就是说我们可以写4个字符, 注意是字符不是字节,经测试我写进去4个英文字母或者4个汉字都是可以的, 而5个字母或者5个汉字就都提示数据过长.

测试过程:
创建表test, 字段str1, str2, 类型分别为char(4), varchar(4), 不管插入字母还是汉字: 只有当两个字段都小于等于4个的时候才能插入成功.

最后补充一下:

int()类型默认范围: -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647), 无符号模式下范围: 0到4294967295

tinyint()类型默认范围: -128 到 127, 无符号模式下范围: 0-255

char()类型是一个定长文本型, 当你设定为长度4的时候, 就算你写入一个"哈哈", 数据库内部也会给你补成"哈哈xx"保存(x代表空格, 补全的空格查询语句不会显示), 因为定长,所以常用于身份证电话号码等长度基本一致的数据, 有人说char()的效率高,但是在存储引擎为InnoDB时, 影响效率更重要的是一整条数据的长度, 所以在InnoDB更推荐都用varchar()类型.

varchar()类型没有char()的特性, 它是一个可变长度, 正因为是可变长度, 内部实际存储时是你写入的字符串长度加上一个记录长度的字节(如果超过255则占两个字节)

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马