2 Stimmen

MySQL Fehlercode: 1264 Wert außerhalb des Bereichs für die Spalte 'Anzahl' in Zeile 1

Ich habe etwas MySQL-Code:

CREATE TABLE test_table (  
    id int(11) NOT NULL AUTO_INCREMENT,  
    count int(10) unsigned DEFAULT NULL,  
    PRIMARY KEY (id)  
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

insert into test_table (count) values (1);
update test_table set count = IF( count -1 < 0, 0 , count -1 );
update test_table set count = IF( count -1 < 0, 0 , count -1 );

Dies sollte `count` auf Null setzen, wenn (count -1) < 0.

Ich erhalte einen Fehler:

Fehlercode: 1264 für die Spalte 'count' in Zeile 1 ein Wert außerhalb des Bereichs.

Dies liegt daran, dass `count` ein unsigned int ist. Wenn ich einen signed int benutze, funktioniert es.

Ist das ein Bug in MySQL? Ich benutze: mysql Ver 14.14 Distrib 5.1.46sp1, für Win32 (ia32)

5voto

Mark Byers Punkte 761508

Ich denke, du solltest das tun:

UPDATE test_table
SET count = IF( count < 1, 0 , count -1 )

Der Wert von count - 1 unterläuft, wenn count null ist.

SELECT count, count - 1 FROM test\_table;
+-------+----------------------+
| count | count - 1            |
+-------+----------------------+
| 0     | 18446744073709551615 |
| 1     |                    0 |
| 2     |                    1 |
+-------+----------------------+

Wenn ich deine Abfrage ausprobiere, funktioniert es nicht... aber es scheitert nicht genau so, wie du siehst.

1voto

The Archetypal Paul Punkte 40239

Wenn die Zählung unsigned ist und ihr Wert null beträgt, dann führt das Subtrahieren von 1 aus dem Wert zu einem Wert außerhalb des Bereichs eines unsigned int. Also korrigiere ich die Fehlermeldung und denke, dass es sich nicht um einen Fehler handelt

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X