Hi!
ist schon spät, aber da muss ich noch mal nachfragen. jeder datentyp bei mysql hat von hause aus einen default wert ? das wäre sehr unschön.....
Das ist, wenn ich das richtig verstanden habe, einem Kompromiss geschuldet. Da MySQL abgesehen von der InnoDB-Engine keine Transaktionen bietet, über die man bei einem Fehler eine beispielsweise umfangreiche Einfügeaktion wieder komplett rückgängig machen könnte, wenn irgendwo in der Mitte was nicht gepasst hat, versucht MySQL den nächstgelegenen validen Wert zu finden und einzufügen. Ein überlanger String wird abgeschnitten, ein falsches Datum zu 0000-00-00, und so weiter. Es ist nicht die Aufgabe eines DBMS Eingabewerte zu validieren. Das muss die mit dem Endanwender agierenden Anwendung tun. Die zu speichernden Daten müssen nur plausibel gegenüber dem jeweiligen Feldtyp sein, wofür sie eben im Fehlerfall angepasst werden (in der Standardeinstellung).
Nun könntest du argumentieren: Scheiße gebaut, hätten sie mal gleich Transaktionen eingebaut - und hast das dabei aus deinem professionellen Auge betrachtet. - Jedoch, die Zielgruppe hatte und hat meist keine Transaktionen nötig und Geschwindigkeit auch auf geringer ausgestatteten Maschinen war und ist ein wichtigerer Punkt. Die Frage ist nun, was für den größten Teil der Zielgruppe wichtiger ist: absolute Strenge beim Einfügen gepaart mit Abbrüchen im Fehlerfall oder Anpassungen bei fehlerhaften Werten, dafür aber das Durchlaufen der Aktion. Seit Version 5.0.2 kann man sich das sogar selbst aussuchen (STRICT_TRANS_TABLES oder STRICT_ALL_TABLES).
Siehe How MySQL Deals with Constraints und das Unterkapitel Constraints on Invalid Data.
Lo!