MySQL Warnung wenn Feldlaenge zu kurz
am 12.07.2006 12:52:41 von Alexander Vipach
Hallo allerseits,
wenn man in MySQL ein Feld mit VARCHAR(10) typisiert und dann
'12345678901234567890' einfügt, wird einfach alles nach zehn Zeichen
abgeschnitten. Macht man das INSERT direkt im MySQL-Client, wird doch
immerhin "1 warning" angezeigt, weshalb ich vermute, das sich das
Warning auf das zu kurze Feld bezieht und man an diese Warnings ja auch
irgendwie in Perl kommen muß.
Also habe ich beim dbh->connect "Warn => 1" und "PrintWarn => 1" gesetzt
und leite mit
$SIG{__WARN__} = sub {
print WARNING getDate()." [warning] ".$_[0]."\n";
};
$SIG{__DIE__} = sub {
print ERROR getDate()." [error] ".$_[0]."\n";
exit(1);
};
die Warnings und Errors in zwei Dateien um.
Das klappt auch eigentlich ganz gut, zumindest kommen die
Fehlermeldungen die MySQL auch bisher ausgegeben hat nun in den beiden
Dateien an, doch leider gibt mir MySQL immer noch keine Warnings wenn
ich Felder mit zu langem Inhalt zu füllen versuche.
Kann mir da jemand weiterhelfen, wie ich das Problem löse?
Es kann doch nicht des Rätsels Lösung sein, das ich jeden String auf
seine Länge prüfe bevor ich ihn an sth->execute() weiterreiche, oder?
Ciao
Alex
Re: MySQL Warnung wenn Feldlaenge zu kurz
am 12.07.2006 15:33:28 von Christian Kirsch
Alexander Vipach schrieb:
> Hallo allerseits,
>
> wenn man in MySQL ein Feld mit VARCHAR(10) typisiert und dann
> '12345678901234567890' einfügt, wird einfach alles nach zehn Zeichen
> abgeschnitten. Macht man das INSERT direkt im MySQL-Client, wird doch
> immerhin "1 warning" angezeigt, weshalb ich vermute, das sich das
> Warning auf das zu kurze Feld bezieht und man an diese Warnings ja auch
> irgendwie in Perl kommen muß.
>
> Also habe ich beim dbh->connect "Warn => 1" und "PrintWarn => 1" gesetzt
> und leite mit
> $SIG{__WARN__} = sub {
> print WARNING getDate()." [warning] ".$_[0]."\n";
> };
> $SIG{__DIE__} = sub {
> print ERROR getDate()." [error] ".$_[0]."\n";
> exit(1);
> };
> die Warnings und Errors in zwei Dateien um.
>
> Das klappt auch eigentlich ganz gut, zumindest kommen die
> Fehlermeldungen die MySQL auch bisher ausgegeben hat nun in den beiden
> Dateien an, doch leider gibt mir MySQL immer noch keine Warnings wenn
> ich Felder mit zu langem Inhalt zu füllen versuche.
>
> Kann mir da jemand weiterhelfen, wie ich das Problem löse?
Es gibt m.E. in neueren MySQL-Versionen eine Funktion, mit der man
sich die letzte Warnung anzeigen lassen kann (vermutlich irgendwo im
"SHOW"-Umfeld).
Möglicherweise kannst Du MySQL auch zwingen, so etwas als Fehler zu
behandeln - das dürfte dann entweder eine Startup-Option des Servers
oder ein Konfigurationsparameter der Connection sein. Für all dies ->
Dokumentation bei dev.mysql.com/doc.
>
> Es kann doch nicht des Rätsels Lösung sein, das ich jeden String auf
> seine Länge prüfe bevor ich ihn an sth->execute() weiterreiche, oder?
In einer HTML-Oberfläche würde ich die Eingabefelder einfach auf die
in der DB vorgesehene Länge begrenzen (INFORMATION SCHEMA ist ab MySQL
5.0 Dein Freund - vorher ist es etwas lästiger).