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)(长度根据业务来调整)。

  • 24
    点赞
  • 97
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
引用\[1\]提到,在MySQL,使用tinyint(1)来设置表字段的数据类型,可以存储0和1。在Java,可以使用Boolean类型来接收,0映射为false,1映射为true。而如果使用tinyint来设置字段的数据类型,映射到Java数据类型,不仅可以使用Boolean类型来接收,也可以使用int类型来接收。\[3\]所述的情况是,当tinyint(1)存储非0和1的数字时,查询结果会映射为Boolean类型,即0映射为false,1-9数字都将映射为true。如果希望单纯地查询出数字,可以将字段类型设置为tinyint而不是tinyint(1)。\[3\] #### 引用[.reference_title] - *1* [理解误区——mysqltinyintJava数据类型对应关系tinyint(1) 与tinyint(4)的区别](https://blog.csdn.net/qq_42937522/article/details/104131892)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [MysqltinyintJava数据类型对应关系](https://blog.csdn.net/LZ15932161597/article/details/110284630)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值