mysql中的数据长度

在设计数据库表字段的过程中,会遇到诸如“int(255)”、"varchar(255)"之类的问题,那么这个长度代表什么呢?

CREATE TABLE `tt` (
  `a` int(2) DEFAULT NULL,
  `b` varchar(2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

首先建立一张表,SQL语句如上。然后通过Navicat工具向表中添加数据。

可以看到,正常添加数据是可以的。接下来试一下比较“异常”的数据,

可以看到,在操作时候,a的值333被添加进去了;而varchar类型的b,只能添加两个字符,再尝试多一个字符,Navicat禁止了输入。那么使用SQL语句还原一下这个操作,看看报什么错:

insert into tt(a,b) values(555,'555');

执行这个SQL语句,提示b列过长。

从上面试验的结果可以看出,对于int类型,它的长度不是代表有几个数字(3-长度为1,33-长度为2,);而对于varchar类型,它的长度表示最大存储的字符数。

那么int类型的这个长度,表示什么呢,经过一番查阅,这里的长度叫做“显示宽度”。

显示宽度其实就是显示的时候,看到的最少数字个数。这里注意,显示宽度不会对原本的值进行改变,只是在显示时候改变样式。

比如 int(2) ,表示不管你的数值是多少,最少可以看到两个数字。假如你存的数值的9,没有满两位,就会在前面补零。假如你的数值是120,超过了显示宽度,则直接显示原始值,不做补零操作。这里的补零操作需要依赖一个关键字ZEROFILL。

执行如下SQL语句建立一个表,

CREATE TABLE `xx` (
  `a` int(2) ZEROFILL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

使用Navicat在表中添加数据1,按照上面介绍,应当展示01才对,但这里仅仅展示了一个1,原因是Navicat做了优化,使用命令行查看,

总结一下上面的,

  • 显示宽度只适应于Mysql的数值类型

  • 显示宽度和数值类型的取值范围是无关的。
    例如int(10) 他的取值范围任然是(-2 147 483 648,2 147 483 647)

  • 显示宽度只是指明MYSQL数值类型最少显示的数字个数。
    当数值的位数小于显示宽度时会有空格或零填充,当数值的位数大于显示宽度时,直接显示该数值

  • 显示宽度的效果(插零)需要配合zerofill使用

  • varchar类型的长度是真正表示存储的字符数的

参考:https://juejin.im/post/5b24a2c251882574d73c6f82

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值