
Kapitel 2: Vorb emerkungen zum deutschen Handbuch 47
¨andern, so dass versteckte Spalten nie verglichen werden, wenn DISTINCT ausgef¨uhrt
wird.
Hierf¨ur ein Beispiel:
SELECT DISTINCT mp3id FROM band_downloads WHERE userid = 9 ORDER BY id
DESC;
und
SELECT DISTINCT band_downloads.mp3id, FROM band_downloads,band_mp3
WHERE band_downloads.userid = 9 AND band_mp3.id = band_downloads.mp3id
ORDER BY band_downloads.id DESC;
Im zweiten Fall bekommen Sie in MySQL 3.23.x m¨oglicherweise zwei identische Zeilen
in der Ergebnismenge (weil die versteckten ’id’-Spalten unterschiedlich sein k¨onnen).
Beachten Sie, dass dies nur f¨ur Anfragen zutrifft, bei denen die ORDER BY-Spalten
nicht im Ergebnis enthalten sind. ANSI-SQL erlaubt dies nicht
• Weil MySQL es zul¨aßt, mit Tabellentypen zu arbeiten, die keine Transaktionen un-
terst¨utzen (und folglich Daten nicht per rollback in den vorherigen Zustand brin-
gen k¨onnen), verhalten sich einige Dinge in MySQL etwas anderes als in anderen
SQL-Servern. Das kann manchmal etwas ung¨unstig sein, weil Spaltenwerte in der
Applikation ¨uberpr¨uft werden m¨ussen. Auf der anderen Seite erhalten Sie dadurch
eine nette Geschwindigkeitssteigerung, weil es MySQL gestattet, einige Optimierungen
vorzunehmen, die ansonsten sehr schwer durchzuf¨uhren sein w¨urden.
Wenn Sie eine Spalte auf einen nicht zul¨assigen Wert setzen, speichert MySQL, statt
ein Rollback durchzuf¨uhren, den besten m¨oglichen Wert in der Spalte:
− Wenn Sie versuchen, in einer numerischen Spalte einen Wert ausserhalb des Wer-
tebereichs zu speichern, speichert MySQL statt dessen den kleinsten oder gr¨oßten
m¨oglichen Wert.
− Wenn Sie versuchen, eine Zeichenkette, die nicht mit einer Zahl beginnt, in einer
numerischen Spalte zu speichern, speichert MySQL 0.
− Wenn Sie versuchen, NULL in einer Spalte zu speichern, die keine NULL-Werte zul¨aßt,
speichert MySQL 0 oder ’’ (leere Zeichenkette). (Man kann dieses Verhalten je-
doch mit der -DDONT USE DEFAULT FIELDS-Kompilierungs-Option ¨andern.)
− MySQL l¨aßt zu, dass einige falsche Datumswerte in DATE- und DATETIME-Spalten
gespeichert werden (wie 2000-02-31 oder 2000-02-00). Wenn das Datum v¨ollig
falsch ist, speichert MySQL den speziellen Datumswert 0000-00-00 in der Spalte.
− Wenn Sie enum auf einen nicht unterst¨utzten Wert setzen, wird es auf den Fehler-
wert ’leere Zeichenkette’ oder (bei numerischen Werten) auf 0 gesetzt.
• Wenn Sie PROCEDURE auf eine Anfrage ausf¨uhren, die eine leere Ergebnismenge liefert,
kann es in einigen F¨allen vorkommen, dass PROCEDURE die Spalten nicht umwandelt.
• Wenn Sie eine Tabelle vom Typ MERGE anlegen, wird nicht ¨uberpr¨uft, ob die zugrunde
liegenden Tabellen von einem kompatiblen Typ sind.
• MySQL kann bislang nicht mit NaN-, -Inf- und Inf-Werten in Doubles umgehen. Wenn
Sie diese benutzen, gibt es Probleme, wenn Daten importiert oder exportiert werden.
Als Zwischenl¨osung sollten Sie NaN in NULL umwandeln (falls m¨oglich) und -Inf und
Inf in den kleinsten bzw. gr¨oßten m¨oglichen Wert.
Komentáře k této Příručce