6.5 Типы Java, JDBC и MySQL
MySQL Connector/J гибко обрабатывает преобразования между типами данных MySQL и Java.
В общем случае, любой тип данных MySQL может быть преобразован в java.lang.String, а любой числовой тип может быть преобразован в любой числовой тип Java, хотя могут произойти округление, переполнение или потеря точности.
Connector/J выдает предупреждения или вызывает исключения DataTruncation, как требуется спецификацией JDBC, если соединение не было настроено на это с помощью свойства jdbcCompliantTruncation и установкой значения на false.
Преобразования, которые всегда гарантированно работают, перечислены в следующей таблице. Первый столбец содержит один или несколько типов данных MySQL, а второй столбец содержит один или несколько типов Java, в которые типы MySQL могут быть преобразованы.
Таблица 6.19 Возможные преобразования между типами данных MySQL и Java
| Эти типы данных MySQL | Могут всегда быть преобразованы в эти типы 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 с меньшей точностью или емкостью, чем тип данных MySQL, который вы преобразуете.
Метод ResultSet.getObject() использует преобразования типов между MySQL и Java типами, следуя спецификации JDBC при необходимости. Значения, возвращаемые ResultSetMetaData.GetColumnTypeName() и ResultSetMetaData.GetColumnClassName(), показаны в таблице ниже. Для получения дополнительной информации о типах JDBC см. справочник по классу.
Таблица 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( any ) 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 |
© 2025 Oracle
Licensed under the GPLv2 License.