Mysql Multiplikation

Hallo !

Ich hoffe erstmal ich bin in diesem Bereich richtig.

Ich habe ein Problem, welches bei uns für viel Ärger sorgt !

Eine einfache Tabelle

Code:
CREATE TABLE test
(
   menge  bigint,
   preis  int(10)
)

Ich füge nun einen Datensatz ein

Code:
INSERT INTO test(menge,preis) values(-80275,6)

Und mache folgendes Update

Code:
UPDATE test set menge = menge + ( menge * preis)

Es passt alles

Ich änder die Tabelle nun um um mache folgende Tabelle

Code:
CREATE TABLE test
(
   menge  bigint,
   preis  int(10) unsigned
)

Ich füge nun wieder einen Datensatz ein und mache die Multiplikation. Nun passt nichts mehr, der Wert von menge ist 9223372036854775807. Wieso ?
 
6 + (6 * -80275) = -481644
Du willst eine negative Zahl in unsigned int stecken? Da kann doch nur Mist rauskommen.
Oder hab ich jetzt deine Frage falsch verstanden?

Gruß odigo
 
@odigo

menge=menge+(menge*preis)
idF:
menge=-80275+(-80275*6)

Menge ist ja Bigint.Preis ist unsigned.

@Dawen:

Sry, dass ich dir nicht weiterhelfen kann.


lg
 
DIe Zahl 9223372036854775807 ist in Binär 111111111111111111111111111111111111111111111111111111111111111. Daher wurde ich auf einen Overflow schließen.

Nun etwas gegoogelt:
http://dev.mysql.com/doc/refman/5.0/en/arithmetic-functions.html

MySQL Multiplikation:
If one of the arguments is an unsigned integer, and the other argument is also an integer, the result is an unsigned integer.

Also haben wir -80275 + (-80275 * 6), wobei der zweite Summand ein unsigned integer wird, kann also nicht negativ sein.

Ich hoffe ich habe dir damit geholfen.

MrSpider
 
Zurück
Oben