當遇到tyint 生成轉化bool 類型問題很惡心,記錄一下解決方法
一、
TinyInt轉換規則
JAVA數據類型 和 MYSQL的數據類型轉換,要注意tinyInt 類型,且存儲長度為1的情況。
MYSQL官方的JDBC文檔定義轉換規則如下:
MySQL Types to Java Types for ResultSet.getObject():
MySQL Type Name
|
Return value of
GetColumnClassName
|
Returned as Java Class
|
---|---|---|
TINYINT |
TINYINT |
翻譯: 如果 否則轉為java.lang.Integer。 () |
注意 ,是ResultSet.getObject() 方法
參考文檔:https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-type-conversions.html
修復方法
1、tinyInt(1) 只用來代表Boolean含義的字段,且0代表False,1代表True。如果要存儲多個數值,則定義為tinyInt(N), N>1。例如 tinyInt(2)
2、JDBC的URL增加 tinyInt1isBit=false參數,注意參數名區分大小寫,否則不生效
jdbc:mysql://${ucmha.proxy1_2.host}/${db.mysql.db}?tinyInt1isBit=false
建議雙管齊下,以防新人接手不知道這個規則誤踩坑。
二、按官方建議的類型處理
本文講述了Java數據類型與MySql數據類型對照表。分享給大家供大家參考,具體如下:
類型名稱 | 顯示長度 | 數據庫類型 | 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 |
對於bolb,一般用於對圖片的數據庫存儲,原理是把圖片打成二進制,然后進行的一種存儲方式,在java中對應byte[]數組。
對於boolen類型,在mysql數據庫中,個人認為用int類型代替較好,對bit操作不是很方便,尤其是在具有web頁面開發的項目中,表示0/1,對應java類型的Integer較好。
完結