MySQL Connector/J ist flexibel in Bezug auf die Konvertierung von MySQL- und Java-Datentypen.
Generell lässt sich jeder MySQL-Datentyp in einen java.lang.String und jeder numerische Typ in einen numerischen Java-Typ umwandeln, wobei jedoch Rundungen, Überlauf oder Genauigkeitsverluste eintreten können.
Seit Connector/J 3.1.0 gibt der JDBC-Treiber Warnungen oder
DataTruncation-Ausnahmen im Einklang mit der JDBC-Spezifikation
aus, wenn Sie dies nicht ausdrücklich unterbinden, indem Sie
die Eigenschaft jdbcCompliantTruncation auf
false
setzen.
Die in der folgenden Tabelle aufgeführten Konvertierungen funktionieren garantiert:
Verbindungseigenschaften - Diverse.
Diese MySQL-Datentypen | lassen sich immer in diese Java-Typen konvertieren |
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 |
Hinweis: Wenn Sie einen numerischen Java-Typ auswählen, der weniger genau oder groß als der MySQL-Typ ist, aus oder in welchen Sie konvertieren, kann es zu Rundungsverhalten, Überlauf oder Genauigkeitsverlust kommen.
Die Methode ResultSet.getObject()
nimmt
folgende Konvertierungen zwischen MySQL- und Java-Typen vor,
wobei sie sich möglichst an die JDBC-Spezifikation hält:
Konvertierung von MySQL- in Java-Typen für ResultSet.getObject().
MySQL-Typname | Rückgabe als Java-Klasse |
BIT(1) (neu in MySQL-5.0) | java.lang.Boolean |
BIT( > 1) (neu in MySQL-5.0) | byte[] |
TINYINT |
java.lang.Boolean , wenn die
Konfigurationseigenschaft
tinyInt1isBit auf
true gesetzt ist (der
Standardwert) und die Speichergröße 1 ist,
andernfalls
java.lang.Integer . |
BOOL, BOOLEAN | Siehe TINYINT weiter oben, da diese Typen zurzeit Aliase für TINYINT(1) sind. |
SMALLINT[(M)] [UNSIGNED] |
java.lang.Integer (egal ob UNSIGNED oder nicht) |
MEDIUMINT[(M)] [UNSIGNED] |
java.lang.Integer, wenn UNSIGNED
java.lang.Long
|
INT,INTEGER[(M)] [UNSIGNED] |
java.lang.Integer , wenn UNSIGNED
java.lang.Long
|
BIGINT[(M)] [UNSIGNED] |
java.lang.Long , wenn UNSIGNED
java.math.BigInteger
|
FLOAT[(M,D)] | java.lang.Float |
DOUBLE[(M,B)] | java.lang.Double |
DECIMAL[(M[,D])] | java.math.BigDecimal |
DATE | java.sql.Date |
DATETIME | java.sql.Timestamp |
TIMESTAMP[(M)] | java.sql.Timestamp |
TIME | java.sql.Time |
YEAR[(2|4)] |
java.sql.Date (Datum wird um Mitternacht auf 1.
Januar umgestellt) |
CHAR(M) |
java.lang.String (wenn der Zeichensatz für die
Spalte BINARY ist, wird
byte[] zurückgegeben). |
VARCHAR(M) [BINARY] |
java.lang.String (wenn der Zeichensatz für die
Spalte BINARY ist, wird
byte[] zurückgegeben). |
BINARY(M) | byte[] |
VARBINARY(M) | byte[] |
TINYBLOB | byte[] |
TINYTEXT | java.lang.String |
BLOB | byte[] |
TEXT | java.lang.String |
MEDIUMBLOB | byte[] |
MEDIUMTEXT | java.lang.String |
LONGBLOB | byte[] |
LONGTEXT | java.lang.String |
ENUM('value1','value2',...) | java.lang.String |
SET('value1','value2',...) | java.lang.String |
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.