當遇到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較好。
完結
