文件首頁
MySQL Connector/J 開發人員指南
相關文件 下載本手冊
PDF (美式信紙) - 1.2Mb
PDF (A4) - 1.2Mb


MySQL Connector/J 開發人員指南  /  Connector/J 參考  /  Java、JDBC 和 MySQL 類型

6.5 Java、JDBC 和 MySQL 類型

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

如果 tinyInt1isBit=truetransformedBitIsBoolean=falseBIT

如果 tinyInt1isBit=truetransformedBitIsBoolean=trueBOOLEAN

如果 tinyInt1isBit=falseTINYINT

如果 tinyInt1isBit=truetransformedBitIsBoolean=false java.lang.Boolean

如果 tinyInt1isBit=truetransformedBitIsBoolean=true java.lang.Boolean

如果 tinyInt1isBit=falsejava.lang.Integer

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