Tuesday, September 30, 2008

MySQL treibt mich zum Wahnsinn

Hier habe ich ja so schön geschrieben, dass der Wechsel von Datenbanksystemen mit DBI so schön einfach ist. In den letzten Tagen habe ich dann aber ein Problem gehabt, das mir rätselhaft erscheint und die Lösung des Problems ist nicht so toll.

Aber worum geht es? Ich benötige Informationen aus einer Datenbank - eine MySQL-Datenbank. So weit kein Problem. Mit dem mysql Client funktioniert alles einwandfrei. Dann möchte ich die Informationen in einem Skript verwenden. Ich habe also so wie immer

my $dbh = DBI->connect( "DBI:mysql:$db:$host", $user, $password ) or die $DBI::errstr;

geschrieben.

Bei der Ausführung des Skripts taucht dann aber ein Fehler auf:

DBD driver has not implemented the AutoCommit attribute

Komisch. Mit einer anderen Datenbank klappt alles und es ist ein und das selbe Skript. Also kann ich unterschiedliche DBI- oder DBD::mysql-Versionen ausschließen.

Mit AutoCommit habe ich hier direkt nichts zu tun. Also heißt es auf Spurensuche gehen. Was ist unterschiedlich bei den zwei Datenbanken...

* Unterschiedliche Hosts - ok, das ist eher nicht das Problem
* Datenbank, bei der es funktioniert hat der User alle Rechte, bei der es nicht funktioniert nur Leserechte
* Datenbank-Version, mit der es klappt ist eine 4.x, die andere eine 3.22.x

Nach drei Tagen Suche habe ich dann den entscheidenden Hinweis gefunden: Die Parameter bei connect müssen anders sein:

my $dbh = DBI->connect( "$db:$host", $user, $password, 'mysql' ) or die $DBI::errstr;

Da soll mal einer drauf kommen, dass man bei so veralteten MySQL-Versionen die Parameter umstellen muss.

Schade, dass ich keinen Einfluss auf die Versionen von MySQL habe, sonst hätte ich zu einem Upgrade geraten...

No comments: