Mysql中tinyint与Java数据类型对应关系

  • Mysql中,如果使用tinyint(1)来设置表中字段的数据类型,可以存储0和1;在Java中使用Boolean来接收,0映射为false,1映射为true。
  • Mysql中,如果使用tinyint来设置字段的数据类型,映射到Java数据类型中,不仅可以使用上面的Boolean类型来接收,也可以使用Java中int类型来接收。在MySQL中存储的tinyint(1)类型数据,不仅可以存储0和1,任意一个一位自然数都可以(0-9)。不过,当这样(tinyint(1))使用时,0映射为Java中的Boolean类型false,1-9数字都将映射为true。
  • tinyint(1)与tinyint(4)的区别:tinyint默认的位数是4位,但是我们设计数据库就算设置成tinyint(1)[(1)表示数据以一个长度来显示],但也不能影响它实际占了4个存储空间。tinyint(1) 和 tinyint(4)中的1和4只有字段指定zerofill(零填充)时才有效,不足位数用0来填充。其实他们的存储空间大小是一样的。如tinyint(4),如果实际值是2,如果列指定了zerofill,查询结果就是0002,左边用0来填充。
  • 在这里插入图片描述
  • 非0和1存储场景:
    字段:status(值为1,2,3,4)
    类型:tinyint 长度:1(有符号的)
    实际结果:查询出来的数据列表,状态值不管是1、2、3还是4,都是"boolean true"
    期望结果单纯的查询出数据列表取出数字。

问题分析:
由于MySql中没有boolean类型,所以会用到tinyint[1]类型来表示,在mysql中boolean=tinyint[1]

解决方式:
tinyint类型长度设置问题,当我把长度改成4时,查询结果就是我的期望结果了。

其他思路:
在不改变类型长度下,修改查询sql语句,在需要执行的sql语句中,把这个状态字段*1,结果就会得到数据库存的值了(ps:要给这个修改后的状态字段加别名,不然查询出来的就是status*1 => ‘1’)


总结:

  1. 只存储0和1,表示true或false,则使用tinyint(1)
  2. 存储状态信息1、2、3、4等,为使查询出的数据是原始的数字,有两种方式:
    A、修改tinyint类型的长度,使用tinyint(4)
    B、在查询的sql语句上面做修改

    所以由这里可以看出,当使用tinyint(1)来存储超过0,1两个以外的值,比如存储2,那这个2就是脏数据。如果要2有效,就用tinyint(4)。tinyint(1)只适用于存储0和1两个值,也即真和假,true和false。
    一般情况,如果存的是纯数字的话,建议用tinyint,如果是字符串,且是固定长度的,建议用char。


bit & tinyint:


两者都可以表示Java中的布尔值。
如果没有扩展需求,仅仅表示逻辑true或false的话,bit是首选;
如果有扩展需求,以后可能不仅仅是逻辑布尔两个值的话,就用tinyint(4)(长度根据业务来调整)。

猜你喜欢

转载自blog.csdn.net/LZ15932161597/article/details/110284630