今天在经过ReultSet获取mysql字段信息的时候,发现tinyint(1)类型的字段都自动变成了bit(0),开始以为奇怪,查看官网说明后才发现,在没有设置tinyInt1isBit的状况下,这种转换是自动的。html
https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-type-conversions.htmljava
知道问题所在了,下面说说解决方法,tinyInt1isBit这个参数默认状况下是true,在建立jdbc链接的时候将它重置为false便可。mysql
jdbc:mysql://127.0.0.1:3306/db_name?tinyInt1isBit=false
这里还要注意一点的事,jdbc中的各类类型都有默认的显示值,以下图sql
类型名称 | 显示长度 | 数据库类型 | JAVA类型 | JDBC类型索引(int) |
VARCHAR | L+N | VARCHAR | java.lang.String | 12 |
CHAR | N | CHAR | java.lang.String | 1 |
BLOB | L+N | BLOB | java.lang.byte[] | -4 |
TEXT | 65535 | VARCHAR | java.lang.String | -1 |
INTEGER | 4 | INTEGER UNSIGNED | java.lang.Long | 4 |
TINYINT | 3 | TINYINT UNSIGNED | java.lang.Integer | -6 |
SMALLINT | 5 | SMALLINT UNSIGNED | java.lang.Integer | 5 |
MEDIUMINT | 8 | MEDIUMINT UNSIGNED | java.lang.Integer | 4 |
BIT | 1 | BIT | java.lang.Boolean | -7 |
BIGINT | 20 | BIGINT UNSIGNED | java.math.BigInteger | -5 |
FLOAT | 4+8 | FLOAT | java.lang.Float | 7 |
DOUBLE | 22 | DOUBLE | java.lang.Double | 8 |
DECIMAL | 11 | DECIMAL | java.math.BigDecimal | 3 |
BOOLEAN | 1 | 同TINYINT | ||
ID | 11 | PK (INTEGER UNSIGNED) | java.lang.Long | 4 |
DATE | 10 | DATE | java.sql.Date | 91 |
TIME | 8 | TIME | java.sql.Time | 92 |
DATETIME | 19 | DATETIME | java.sql.Timestamp | 93 |
TIMESTAMP | 19 | TIMESTAMP | java.sql.Timestamp | 93 |
YEAR | 4 | YEAR | java.sql.Date | 91 |