Autoincrement Problem

Autoincrement Problem

am 31.03.2006 03:34:01 von Oliver Benning

Hallo,

ich bin von MySQL 3.23.x auf MySQL 4.1.11 (Linux) umgestiegen. Jetzt
habe ich das Problem, daß meine PHP Anwendungen bei Auto-Increment
Feldern immer den Fehler "1062 : Duplicate entry '0' for key 1"
erzeugen, obwohl ich keinen Wert für diese Spalte angebe. Das betrifft
alle Tabellen, egal ob leer oder nicht.

Mit phpMyAdmin funktioniert es. Kopiere ich den phpMyAdmin INSERT Befehl
in meine PHP Anwendung, kommt wieder der Fehler.

Woran könnte das liegen?

Gruß,
Oliver

Re: Autoincrement Problem

am 31.03.2006 04:54:32 von Johannes Vogel

Hi Oliver

Oliver Benning wrote:
> ich bin von MySQL 3.23.x auf MySQL 4.1.11 (Linux) umgestiegen. Jetzt
> habe ich das Problem, daß meine PHP Anwendungen bei Auto-Increment
> Feldern immer den Fehler "1062 : Duplicate entry '0' for key 1"
> erzeugen, obwohl ich keinen Wert für diese Spalte angebe. Das betrifft
> alle Tabellen, egal ob leer oder nicht.
> Mit phpMyAdmin funktioniert es. Kopiere ich den phpMyAdmin INSERT Befehl
> in meine PHP Anwendung, kommt wieder der Fehler.
> Woran könnte das liegen?

Da du keinerlei Code o.ä. postest, kann ich nur raten.
Scheint so, als wäre der Auto-increment-Wert der Tabelle verloren
gegangen. Schau doch mal mittels `show table status;`, welcher Wert für
auto_increment vorgesehen ist.

Passiert das nur bei einer Tabelle oder bei allen?
Wie sieht dein Statement denn aus?

HTH, Johannes

Re: Autoincrement Problem

am 31.03.2006 09:19:15 von Axel Schwenke

"Oliver Benning" wrote:
>
> ich bin von MySQL 3.23.x auf MySQL 4.1.11 (Linux) umgestiegen.

4.1.11 ist nicht direkt taufrisch. Wenn du schon upgradest,
warum dann nicht auf die aktuelle 4.1.18?

> Jetzt
> habe ich das Problem, daß meine PHP Anwendungen bei Auto-Increment
> Feldern immer den Fehler "1062 : Duplicate entry '0' for key 1"
> erzeugen, obwohl ich keinen Wert für diese Spalte angebe.

Ich vermute jetzt mal, du sprichst von INSERTs, bei denen du
die AUTO_INCREMENT Spalte nicht in der Spaltenliste aufführst?

Hast du mal überprüft, ob Indexe und sonstige Attribute auf
deinen Tabellen/Spalten noch korrekt sind? Wie hast du die
Daten migriert?

> Mit phpMyAdmin funktioniert es. Kopiere ich den phpMyAdmin INSERT Befehl
> in meine PHP Anwendung, kommt wieder der Fehler.

Dann würde ich mal sagen, daß mit der Datenbank alles OK ist.
Laufen denn dein phpMyAdmin und die Applikation auf dem selben
Webserver? Benutzen das selbe PHP? Oder anders gefragt: hast
du den Client - PHP - auch upgraded?


XL

Re: Autoincrement Problem

am 31.03.2006 13:20:02 von Oliver Benning

Axel Schwenke wrote:
> "Oliver Benning" wrote:
>>
> Dann würde ich mal sagen, daß mit der Datenbank alles OK ist.
> Laufen denn dein phpMyAdmin und die Applikation auf dem selben
> Webserver? Benutzen das selbe PHP? Oder anders gefragt: hast
> du den Client - PHP - auch upgraded?

Ich habe den SQL Befehl, den phpMyAdmin nach dem INSERT ausgibt, direkt
in die MySQL Funktionen von PHP eingefügt. Beide Anwendungen laufen auf
dem selben Webserver und benutzen das selbe PHP, das als Apache Modul
läuft.

Ich hab hier lokal noch ne 4.1.16 auf Windows und da macht die selbe
Applikation keinerlei Probleme. Kann also nur irgendwo ein
MySQL-Konfigurationsproblem sein, das phpMyAdmin mit irgendeinem Befehl
ausgleicht.

Re: Autoincrement Problem

am 31.03.2006 14:47:33 von Axel Schwenke

"Oliver Benning" wrote:
> Axel Schwenke wrote:
>> "Oliver Benning" wrote:
>>>
>> Dann würde ich mal sagen, daß mit der Datenbank alles OK ist.
>> Laufen denn dein phpMyAdmin und die Applikation auf dem selben
>> Webserver? Benutzen das selbe PHP? Oder anders gefragt: hast
>> du den Client - PHP - auch upgraded?
>
> Ich habe den SQL Befehl, den phpMyAdmin nach dem INSERT ausgibt, direkt
> in die MySQL Funktionen von PHP eingefügt. Beide Anwendungen laufen auf
> dem selben Webserver und benutzen das selbe PHP, das als Apache Modul
> läuft.

Gib doch mal ein Beispiel. Also das Statement und SHOW CREATE TABLE
für die betroffene Tabelle.

> Ich hab hier lokal noch ne 4.1.16

4.1.16 != 4.1.11

Eventuell ist es ja sinnvoller, gleich zu upgraden. 4.1.11 ist jetzt
ein Jahr alt.


XL

Re: Autoincrement Problem

am 31.03.2006 18:26:58 von Thomas Rachel

Oliver Benning wrote:

> Hallo,
>
> ich bin von MySQL 3.23.x auf MySQL 4.1.11 (Linux) umgestiegen. Jetzt
> habe ich das Problem, daß meine PHP Anwendungen bei Auto-Increment
> Feldern immer den Fehler "1062 : Duplicate entry '0' for key 1"
> erzeugen, obwohl ich keinen Wert für diese Spalte angebe. Das betrifft
> alle Tabellen, egal ob leer oder nicht.
>
> Mit phpMyAdmin funktioniert es. Kopiere ich den phpMyAdmin INSERT Befehl
> in meine PHP Anwendung, kommt wieder der Fehler.
>
> Woran könnte das liegen?
>
> Gruß,
> Oliver
Aus http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html:

[...]

NO_AUTO_VALUE_ON_ZERO

NO_AUTO_VALUE_ON_ZERO affects handling of AUTO_INCREMENT columns. Normally,
you generate the next sequence number for the column by inserting either
NULL or 0 into it. NO_AUTO_VALUE_ON_ZERO suppresses this behavior for 0 so
that only NULL generates the next sequence number.

This mode can be useful if 0 has been stored in a table's AUTO_INCREMENT
column. (Storing 0 is not a recommended practice, by the way.) For example,
if you dump the table with mysqldump and then reload it, MySQL normally
generates new sequence numbers when it encounters the 0 values, resulting
in a table with contents different from the one that was dumped. Enabling
NO_AUTO_VALUE_ON_ZERO before reloading the dump file solves this problem.
mysqldump now automatically includes in its output a statement that enables
NO_AUTO_VALUE_ON_ZERO, to avoid this problem.


Vielleicht ist das Dein Problem?


Ansonsten - zeig doch mal die konkrete Tabellenstruktur (bitte den Output
von SHOW CREATE TABLE) und den fehlschlagenden Query.


Thomas