開頭嘮嗑
前幾天在設(shè)計數(shù)據(jù)庫時偶然發(fā)現(xiàn)mysql還有tinyint 型的字段,百度之后知道了
TINYINT 谜喊,字段類型潭兽,如果設(shè)置為UNSIGNED類型,只能存儲從0到255的整數(shù),不能用來儲存負(fù)數(shù)
TINYINT 型的字段如果不設(shè)置UNSIGNED類型,存儲-128到127的整數(shù)斗遏。
因此我發(fā)現(xiàn)用1個tinyint型數(shù)據(jù)只占用一個字節(jié);一個INT型數(shù)據(jù)占用四個字節(jié)山卦。這看起來似乎差別不大,但是在比較大的表中诵次,字節(jié)數(shù)的增長是很快的账蓉。這個數(shù)據(jù)類型也確實(shí)能為我們節(jié)省一定存儲空間。
看著不錯我決定用它來存儲成績逾一,感覺大小剛剛好铸本,那么他在java中又對應(yīng)什么類型呢?反正寒假在家除了敲代碼也沒有什么樂趣了拍照攝影遵堵?外面霧霾大箱玷,在家吧
,索性把他們之間的關(guān)系理理陌宿。
官方的關(guān)系對應(yīng)表
引自mysql.com-- Java, JDBC and MySQL Types
MySQL類型名 | 返回值 GetColumnClassName | 返回的Java類型 |
---|---|---|
BIT(1) (new in MySQL-5.0) | BIT | java.lang.Boolean |
BIT( > 1) (new in MySQL-5.0) | BIT | byte[] |
TINYINT | TINYINT | 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. |
BOOL, BOOLEAN | TINYINT | See TINYINT, above as these are aliases for TINYINT(1), currently. |
SMALLINT[(M)] [UNSIGNED] | SMALLINT [UNSIGNED] | java.lang.Integer (regardless of whether it is UNSIGNED or not) |
MEDIUMINT[(M)] [UNSIGNED] | MEDIUMINT [UNSIGNED] | java.lang.Integer (regardless of whether it is UNSIGNED or not) |
INT,INTEGER[(M)] [UNSIGNED] | INTEGER [UNSIGNED] | java.lang.Integer, if UNSIGNED java.lang.Long |
BIGINT[(M)] [UNSIGNED] | BIGINT [UNSIGNED] | java.lang.Long, if UNSIGNED java.math.BigInteger |
FLOAT[(M,D)] | FLOAT | java.lang.Float |
DOUBLE[(M,B)] | DOUBLE | java.lang.Double |
DECIMAL[(M[,D])] | DECIMAL | java.math.BigDecimal |
DATE | DATE | java.sql.Date |
DATETIME | DATETIME | java.sql.Timestamp |
TIMESTAMP[(M)] | TIMESTAMP | java.sql.Timestamp |
TIME | TIME | java.sql.Time |
YEAR[(2/4)] | YEAR | If yearIsDateType configuration property is set to false, then the returned object type is java.sql.Short. If set to true (the default), then the returned object is of type java.sql.Datewith the date set to January 1st, at midnight. |
CHAR(M) | CHAR | java.lang.String (unless the character set for the column is BINARY, then byte[] is returned. |
VARCHAR(M) [BINARY] | VARCHAR | java.lang.String (unless the character set for the column is BINARY, then byte[] is returned. |
BINARY(M) | BINARY | byte[] |
VARBINARY(M) | VARBINARY | byte[] |
TINYBLOB | TINYBLOB | byte[] |
TINYTEXT | VARCHAR | java.lang.String |
BLOB | BLOB | byte[] |
TEXT | VARCHAR | java.lang.String |
MEDIUMBLOB | MEDIUMBLOB | byte[] |
MEDIUMTEXT | VARCHAR | java.lang.String |
LONGBLOB | LONGBLOB | byte[] |
LONGTEXT | VARCHAR | java.lang.String |
ENUM('value1','value2',...) | CHAR | java.lang.String |
SET('value1','value2',...) | CHAR | java.lang.String |
跨類型轉(zhuǎn)換
下圖展示了MySQL JDBC允許的跨類型相互轉(zhuǎn)換锡足。
這些mysql數(shù)據(jù)類型 | 總是可以轉(zhuǎn)換為這些java類型 |
---|---|
CHAR, VARCHAR, BLOB, TEXT, ENUM, and SET | java.lang.String, java.io.InputStream, java.io.Reader, java.sql.Blob, java.sql.Clob |
FLOAT, REAL, DOUBLE PRECISION, NUMERIC, DECIMAL, TINYINT, SMALLINT, MEDIUMINT, INTEGER, BIGINT | java.lang.String, java.lang.Short, java.lang.Integer, java.lang.Long, java.lang.Double, java.math.BigDecimal |
DATE, TIME, DATETIME, TIMESTAMP | java.lang.String, java.sql.Date, java.sql.Timestamp |
注意
如果選擇的Java數(shù)值數(shù)據(jù)類型的精度或容量低于要轉(zhuǎn)換/來自的MySQL數(shù)據(jù)類型,則可能會出現(xiàn)舍入壳坪,溢出或精度丟失舶得。
MySQL Connector / J在處理MySQL數(shù)據(jù)類型和Java數(shù)據(jù)類型之間的轉(zhuǎn)換方式方面是靈活的。
在一般情況下爽蝴,任何MySQL數(shù)據(jù)類型可以轉(zhuǎn)換為一個 java.lang.String扩灯,任何數(shù)值類型可以轉(zhuǎn)換為任意的Java數(shù)字類型的,雖然可能會出現(xiàn)舍入霜瘪,溢出或精度損失珠插。