MySQL Connector/J 在處理 MySQL 資料類型和 Java 資料類型之間的轉換方式上具有彈性。
一般而言,任何 MySQL 資料類型都可以轉換為 java.lang.String
,而任何數值類型都可以轉換為任何 Java 數值類型,但可能會發生捨入、溢位或精度損失。
Connector/J 會發出警告或擲回 JDBC 規格要求的 DataTruncation
例外,除非連線已設定為不這樣做,方法是使用屬性 jdbcCompliantTruncation
並將其設定為 false
。
下表列出保證永遠有效的轉換。第一欄列出一個或多個 MySQL 資料類型,第二欄列出一個或多個 MySQL 類型可以轉換成的 Java 類型。
表 6.19 MySQL 和 Java 資料類型之間可能的轉換
這些 MySQL 資料類型 | 永遠可以轉換為這些 Java 類型 |
---|---|
CHAR、VARCHAR、BLOB、TEXT、ENUM 和 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 數值資料類型其精度或容量低於您正在轉換的 MySQL 資料類型,則可能會發生捨入、溢位或精度損失。
ResultSet.getObject()
方法會使用 MySQL 和 Java 類型之間的類型轉換,並在適當的情況下遵循 JDBC 規格。ResultSetMetaData.GetColumnTypeName()
和 ResultSetMetaData.GetColumnClassName()
傳回的值如下表所示。如需 JDBC 類型的詳細資訊,請參閱 java.sql.Types 類別的參考。
表 6.20 MySQL 類型和 ResultSetMetaData.GetColumnTypeName() 和 ResultSetMetaData.GetColumnClassName() 的傳回值
MySQL 類型名稱 | GetColumnTypeName 的傳回值 |
GetColumnClassName 的傳回值 |
---|---|---|
BIT(1) |
BIT |
java.lang.Boolean |
BIT( > 1) |
BIT |
byte[] |
TINYINT(1) SIGNED, BOOLEAN |
如果 如果 如果 |
如果 如果 如果 |
TINYINT( > 1) SIGNED |
TINYINT |
java.lang.Integer |
TINYINT( 任何 ) UNSIGNED |
TINYINT UNSIGNED |
java.lang.Integer |
SMALLINT[(M)] [UNSIGNED] |
SMALLINT [UNSIGNED] |
java.lang.Integer (無論是否為 UNSIGNED ) |
MEDIUMINT[(M)] [UNSIGNED] |
MEDIUMINT [UNSIGNED] |
java.lang.Integer (無論是否為 UNSIGNED ) |
INT,INTEGER[(M)] |
INTEGER |
java.lang.Integer |
INT,INTEGER[(M)] UNSIGNED |
INTEGER UNSIGNED |
java.lang.Long |
BIGINT[(M)] |
BIGINT |
java.lang.Long |
BIGINT[(M)] UNSIGNED |
BIGINT UNSIGNED |
java.math.BigInteger |
FLOAT[(M,D)] |
FLOAT |
java.lang.Float |
DOUBLE[(M,B)] [UNSIGNED] |
DOUBLE |
java.lang.Double (無論是否為 UNSIGNED ) |
DECIMAL[(M[,D])] [UNSIGNED] |
DECIMAL |
java.math.BigDecimal (無論是否為 UNSIGNED ) |
DATE |
DATE |
java.sql.Date |
DATETIME |
DATETIME |
java.time.LocalDateTime |
TIMESTAMP[(M)] |
TIMESTAMP |
java.sql.Timestamp |
TIME |
TIME |
java.sql.Time |
YEAR[(2|4)] |
YEAR |
如果 yearIsDateType 組態屬性設定為 false ,則傳回的物件類型為 java.sql.Short 。如果設定為 true (預設值),則傳回的物件類型為 java.sql.Date 。 |
CHAR(M) |
CHAR |
java.lang.String |
VARCHAR(M) |
VARCHAR |
java.lang.String |
BINARY(M) 、CHAR(M) BINARY |
BINARY |
byte[] |
VARBINARY(M) 、VARCHAR(M) BINARY |
VARBINARY |
byte[] |
BLOB |
BLOB |
byte[] |
TINYBLOB |
TINYBLOB |
byte[] |
MEDIUMBLOB |
MEDIUMBLOB |
byte[] |
LONGBLOB |
LONGBLOB |
byte[] |
TEXT |
TEXT |
java.lang.String |
TINYTEXT |
TINYTEXT |
java.lang.String |
MEDIUMTEXT |
MEDIUMTEXT |
java.lang.String |
LONGTEXT |
LONGTEXT |
java.lang.String |
JSON |
JSON |
java.lang.String |
GEOMETRY |
GEOMETRY |
byte[] |
VECTOR(M) (僅在 MySQL Enterprise Server 提供時支援) |
VECTOR |
byte[] |
ENUM('value1','value2',...) |
CHAR |
java.lang.String |
SET('value1','value2',...) |
CHAR |
java.lang.String |