MySQL的TinyInt类型及JDBC的url中的tinyInt1isBit参数

当使用Java的JDBC连接MySQL数据库读取tinyint(1)类型字段时,会根据配置将值转换为Boolean。默认情况下,tinyInt1isBit=true,1和0分别对应true和false。若需要存储多种数值,建议使用tinyInt(N),N>1。若想保持原始数值,可在JDBC URL中添加tinyInt1isBit=false参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题描述

问题:在使用Java的jdbc读取tinyint(1)类型的数据时,rs.getObject(i)的值为Boolean类型的true/false。而数据库中存储的是1或0,那为啥用JDBC读取到的就是true或false了呢?

所以,JAVA数据类型 和 MYSQL的数据类型转换,要注意tinyInt 类型,且存储长度为1的情况。

二、原因分析

MYSQL官方的JDBC文档定义转换规则如下:

官方文档地址:https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-type-conversions.html

MySQL Types to Java Types for ResultSet.getObject():
java.lang.Boolean if the configuration property tinyInt1isBit is set to true(the default) and the storage size is 1, or java.lang.Integer if not.

翻译:

如果tinyInt1isBit =true(默认),且tinyInt存储长度为1 ,则转为java.lang.Boolean;否则转为java.lang.Integer。
注: 是ResultSet.getObject() 方法

三、解决方法

1、tinyInt(1) 只用来代表Boolean含义的字段,且0代表False,1代表True。如果要存储多个数值,则定义为tinyInt(N), N>1。例如 tinyInt(2)。

2、JDBC的URL增加 tinyInt1isBit=false参数,注意参数名区分大小写,否则不生效:

jdbc:mysql://localhost:3306/test?tinyInt1isBit=false

相关文章:

【1】 https://blog.youkuaiyun.com/dujianxiong/article/details/60571395

【2】 https://blog.youkuaiyun.com/codolio/article/details/6591493

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值