tinyint长度为1时在java中被转化成boolean型

数据库设计字段的时候 将该字段设置成tinyint(1) 的时候 忽然发现在逆向的时候,默认生成的是Boolean类型的变量
经验少的伙伴会不会忽然懵逼,怎么回事 见别人设计的就成了byte类型,怎么自己的就成了boolean类型呢

在这里插入图片描述
咱们先不说原因,先说你为什么设计成tinyint(1)类型的,为什么不设计成int类型呢。

问题:int(1) 和 tinyint(1) 有什么区别呢?

查了下,mysql中设置了储存类型后,储存是定长的,也就是说,int(1) 和 int(4) 在硬盘中所占的字节数都是一样的。

我们知道,int类型占4个字节,tinyint占1个字节。int(1) 和 int(4) 从本身长度还是存储方式上都是一样的,区别就是显示的长度不同,但是要设置一个参数:如果列制定了zerofill 就会用0填充显示,int(4)指定后就会显示为0002。

int(1)和tinyint(4) 相比,肯定int 大。

注意数字类型后面括号中的数字,不表示长度,表示的是显示宽度,这点与 varchar、char 后面的数字含义是不同的。

也就是说不管 int 后面的数字是多少,它存储的范围始终是 -2^31 到 2^31 - 1。

综上整型的数据类型括号内的数字不管是多少,所占的存储空间都是一样

tinyint一个字节 smallint 两个字节 MEDIUMINT三个字节

显而易见,int(1) 和 tinyint(1) ,在设计数据库的时候应该选择tinyint(1)。所占的储存空间越少越好,当然要够用才行。像这样储存一个 个位数的字段,还是用tinyint(1)的好。

上面总结的有点乱。下面精简总结:

  1. tinyint(1) 和 tinyint(3) 没什么区别,占用字节都是一位,存储范围都是一样的
  2. tinyint(3) zerofill ,当插入的数据少于3位的时候,左边自动补零,这才是限制显示长度
  3. int(1) 和 tinyint(1) ,够用的情况下,优先选择tinyint(1),因为占字节少、节省空间。
  4. tinyint一个字节 smallint 两个字节 MEDIUMINT三个字节 int 4个字节 BIGINT 8个字节。
  5. 但是,varchar(5) 这里的5 限制的是储存字符的个数,字符不分贵贱(不分 中文、英文、数字…)。

以上资料来源于https://blog.csdn.net/qq_36204764/article/details/103871105

所以很多人设计表数据字段的时候 比如状态而言 只有01 就设计成了tinyint(1)

怎么办呢,非要用byte类型 ,那就将其设置成tinyint(4)

那是什么原因呢????

因为tinyint(1) 就是一字节 ,不是0就是1,当你去利用java mybatis框架去映射的时候 mybatis会认为你就是 true或者false,所以这不是mysql给你转的。

大家可以去数据库工具设计插入值 是可以直接写一字节的数据的(0,1,2,3,4。。。9)

Tinyint(1) 就只用来保存 bool 值 只有0和1 不要保存其他的值
如果要保存多的值,就用 Tinyint(4) 这样的,那么到了Ef中这个 类型会变成 sbyte ,这个就是一个整形 .

猜你喜欢

转载自blog.csdn.net/yangning_/article/details/109167263