您的位置:首页 > 数据库 > MySQL

mysql tinyint(1)与boolean

2017-10-15 12:34 771 查看
Mysql
读取
tinyint(1)
数据时,如果我们没有在
jdbc url
里特殊指定,那么
tinyint(1)
的数据,会被转化为
boolean
类型。

jdbc
ResultSetImpl
类中有一段代码

switch (field.getSQLType()) {
case Types.BIT:
if (field.getMysqlType() == MysqlDefs.FIELD_TYPE_BIT && !field.isSingleBit()) {
return getObjectDeserializingIfNeeded(columnIndex);
}
return Boolean.valueOf(getBoolean(columnIndex));

case Types.BOOLEAN:
return Boolean.valueOf(getBoolean(columnIndex));

case Types.TINYINT:
if (!field.isUnsigned()) {
return Integer.valueOf(getByte(columnIndex));
}

return Integer.valueOf(getInt(columnIndex));
...


对于
tinyint(1)
类型的字段,读到的数据会先进入
case Types.BIT
代码段,之后会调用
Boolean.valueOf()
,也就是在这里
tinyint
被解析成了
boolean


mysql
的官方文档中有一段话

BOOL, BOOLEAN

These types are synonyms for TINYINT(1). A value of zero is considered false. Nonzero values are considered true

如果想要让
tinyint(1)
转化为
int
,可以在
jdbc url
内指定属性
tinyInt1isBit
false


tinyInt1isBit

Should the driver treat the datatype TINYINT(1) as the BIT type (because the server silently converts BIT -> TINYINT(1) when creating tables)?

Default: true

Since version: 3.0.16
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: