[+/-]
MySQL AB versucht, den Upgrade-Prozess so einfach wie möglich zu halten, doch wie bei jeder Software müssen gelegentlich in neuen Versionen neue Features unterstützt, vorhandene verbessert oder neue Standards erfüllt werden.
In diesem Abschnitt erfahren Benutzer, die von einer Connector/J-Version auf eine andere aufrüsten (oder, im Hinblick auf die JDBC-Funktionalität, auf eine neue Version des MySQL-Servers), worauf sie achten müssen.
Connector/J 3.1 ist auf größtmögliche Abwärtskompatibilität mit Connector/J 3.0 ausgelegt. Größere Änderungen beschränken sich auf die neuen Funktionen von MySQL 4.1 und höher, darunter Unicode-Zeichensätze, vorbereitete Anweisungen auf der Serverseite, SQLState-Codes die in Fehlermeldungen vom Server zurückgegeben werden, und verschiedene Leistungsverbesserungen, die mit Konfigurationseigenschaften ein- und ausgeschaltet werden können.
Unicode-Zeichensätze
— Informationen über dieses neue MySQL-Feature
finden Sie im folgenden Abschnitt und in
Kapitel 10, Zeichensatz-Unterstützung. Wenn Sie etwas
falsch konfiguriert haben, merken Sie das in der Regel an
einer Fehlermeldung wie Illegal mix of
collations
.
Vorbereitete Anweisungen auf der Serverseite — Connector/J 3.1 erkennt und nutzt vorbereitete Anweisungen auf der Serverseite automatisch, wenn sie verfügbar sind (MySQL -Server der Version 4.1.0 und höher).
Seit Version 3.1.7 untersucht der Server alle Arten mit
Connection.prepareStatement()
vorbereiteter SQL-Anweisungen, um festzustellen, ob es
sich um eine Anweisungsart handelte deren Vorbereitung auf
der Serverseite unterstützt wird. Ist dies nicht der
Fall, emuliert der Server sie als clientseitige
vorbereitete Anweisung. Dieses Feature können Sie
deaktivieren, indem Sie
emulateUnsupportedPstmts=false in
Ihren JDBC-URL einbinden.
Wenn Ihre Anwendung Probleme mit vorbereiteten Anweisungen auf der Serverseite hat, können Sie auf den älteren Code für emulierte vorbereitete Anweisungen auf der Clientseite zurückgreifen, der immer noch für ältere MySQL-Server als 4.1.0 mit der Verbindungseigenschaft useServerPrepStmts=false unterstützt wird.
Datums- und Uhrzeitwerte,
die nur aus Nullen bestehen (0000-00-00
...
) — Diese Werte lassen sich in Java
nicht zuverlässig darstellen. Connector/J 3.0.x wandelte
sie immer in NULL um, wenn sie aus einem ResultSet gelesen
wurden.
Connector/J 3.1 löst nach Voreinstellung eine Ausnahme aus, wenn diese Werte auftreten, da dies nach den Standards von JDBC und SQL das korrekte Verhalten ist. Sie können dieses Verhalten aber mit der Konfigurationseigenschaft zeroDateTimeBehavior ändern, die folgende Werte annehmen kann:
exception
(der Standardwert) löst
eine SQLException mit dem SQLState
S1009
aus.
convertToNull
gibt
NULL
anstelle des Datums zurück.
round
rundet das Datum auf den
nächstgelegenen Wert auf, also auf
0001-01-01
.
Ab Connector/J 3.1.7 lässt sich
ResultSet.getString()
mit der
Eigenschaft noDatetimeStringSync=true
von diesem Verhalten abkoppeln (der Standardwert ist
false
). Auf diese Weise können Sie den
Wert mit den Nullen unverändert als String abrufen. Da
dies allerdings jegliche Zeitzonenkonvertierungen
ausschließt, erlaubt Ihnen der Treiber nicht,
noDatetimeStringSync und
useTimezone gleichzeitig
einzuschalten.
Neue SQLState-Codes — Connector/J 3.1 benutzt die SQLState-Codes von SQL:1999, die vom MySQL-Server (sofern er dies unterstützt) zurückgegeben werden. Diese unterscheiden sich von den alten X/Open-Zustandscodes, die Connector/J 3.0 verwendet. Wenn der Treiber mit einem älteren MySQL-Server als MySQL 4.1.0 verbunden ist (die älteste Version, die SQLStates in Fehlercodes zurückliefert), verwendet er eine integrierte Zuordnung. Sie können auf die alte Zuordnung umschalten, indem Sie die Konfigurationseigenschaft useSqlStateCodes=false einstellen.
ResultSet.getString()
— Wenn Sie ResultSet.getString()
auf einer BLOB-Spalte aufrufen, wird nunmehr die Adresse
ihres byte[]-Arrays anstelle einer Stringdarstellung des
BLOBs zurückgegeben. Da BLOBs keinen Zeichensatz haben,
können sie nicht ohne Datenverlust oder Schäden in
java.lang.Strings konvertiert werden.
Um in MySQL Strings mit LOB-Verhalten zu speichern, verwenden Sie einen der TEXT-Typen, die der Treiber alle als java.sql.Clob behandelt.
Debug-Builds — Seit
Connector/J 3.1.8 wird ein Debug-Build des Treibers in
einer Datei namens
mysql-connector-java-
zusammen mit der normalen Binär-jar-Datei namens
[version]
-bin-g.jarmysql-connector-java-
mitgeliefert.
[version]
-bin.jar
Seit Connector/J 3.1.9 liefern wir die .class-Dateien nur noch im Bundle aus, also nur in den JAR-Archiven zusammen mit dem Treiber.
Den „Debug“-Build des Treibers sollten Sie
bitte nur benutzen, wenn Sie dazu aufgefordert werden, um
ein Problem oder einen Fehler an MySQL AB zu melden, da
dieser Build nicht für Produktionsumgebungen geschaffen
ist und sich nachteilig auf die Performance auswirkt. Die
Debug-Binärdatei ist außerdem von der
Aspect/J-Laufzeitbibliothek abhängig, die Sie in der zur
Connector/J-Distribution gehörigen Datei
src/lib/aspectjrt.jar
finden.
Verwendung der UTF-8-Zeichencodes - Vor MySQL Server 4.1 wurde die UTF-8-Zeichencodierung vom Server nicht unterstützt. Der JDBC-Treiber dagegen konnte diese Codierung nutzen, sodass mehrere Zeichensätze in latin1-Tabellen auf dem Server gespeichert werden konnten.
Seit MySQL-4.1 ist diese Funktionalität veraltet. Wenn Sie Anwendungen haben, die sich darauf stützen und sich nicht auf die Unterstützung der offiziellen Unicode-Zeichen in MySQL Server 4.1 oder höher aktualisieren lassen, müssen Sie folgende Eigenschaft in Ihren Verbindungs-URL aufnehmen:
useOldUTF8Behavior=true
Vorbereitete Anweisungen auf der Serverseite - Connector/J 3.1 erkennt und nutzt vorbereitete Anweisungen auf der Serverseite automatisch, wenn sie verfügbar sind (MySQL -Server der Version 4.1.0 und höher). Wenn Ihre Anwendung Probleme mit vorbereiteten Anweisungen auf der Serverseite hat, können Sie auf den älteren Code für emulierte vorbereitete Anweisungen auf der Clientseite zurückgreifen, der immer noch für ältere MySQL-Server als 4.1.0 mit folgender Verbindungseigenschaft unterstützt wird:
useServerPrepStmts=false
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.