it-swarm.com.de

So fügen Sie DECIMAL in die MySQL-Datenbank ein

Ich habe eine Datenbanktabelle mit einigen Feldern, von denen eines, cost, auf den Datentyp DECIMAL festgelegt ist. Ich stelle die Parameter auf 4,2, wobei 4 Zahlen vor dem Dezimalpunkt und 2 danach zulässig sein sollten.

(Mir wurde gesagt, dass die 4 hier ist der Gesamtbetrag und der 2 ist der Betrag nach dem Komma, könnte jemand dies bitte in einer Randnotiz vermerken?)

Wenn ich Daten über eine POST Anfrage einfüge (der Wert 3.80 zum Beispiel) die in meiner Datenbank gespeicherten Daten sind tatsächlich 99.99.

Was mache ich falsch, um dies zu verursachen?

Hier ist die Tabelle:

CREATE TABLE IF NOT EXISTS `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(256) NOT NULL,
`cost` decimal(4,2) NOT NULL,
PRIMARY KEY (`id`)
)

Hier ist meine Anfrage zum Hinzufügen:

INSERT INTO mytable (`id`,`title`,`cost`) 
VALUES (0, 'test title', '3.80')

Update: Es funktioniert nachdem ich 4,2 auf 6,2 geändert habe

26
Alex

MySql-Dezimaltypen sind etwas komplizierter als nur links und rechts vom Dezimalpunkt.

Das erste Argument ist die Genauigkeit , dh die Anzahl der Gesamtziffern. Das zweite Argument ist scale . Hierbei handelt es sich um die maximale Anzahl von Stellen rechts vom Dezimalpunkt.

Somit kann (4,2) Alles von -99.99 Bis 99.99 Sein.

Aus welchem ​​Grund Sie 99.99 Anstelle des gewünschten 3.80 Erhalten, muss der Wert, den Sie einfügen, als größer als 99.99 Interpretiert werden, sodass der maximale Wert verwendet wird. Vielleicht können Sie den Code posten, den Sie zum Einfügen oder Aktualisieren der Tabelle verwenden.

Bearbeiten

Ein Missverständnis in Bezug auf die Verwendung von Maßstab und Genauigkeit wurde korrigiert, per http: //dev.mysql.com/doc/refman/5.0/en/numeric-types.html .

34
JYelton

Ja, 4,2 bedeutet "4 Stellen insgesamt, von denen 2 nach dem Komma stehen". Das entspricht einer Zahl im Format 00.00. Darüber hinaus müssen Sie uns Ihre SQL-Abfrage zeigen. PHP übersetzt nicht ohne Grund 3,80 in 99,99. Vielleicht haben Sie Ihre Felder/Werte in der Abfrage falsch ausgerichtet und versuchen, eine größere Zahl einzufügen, die in ein anderes Feld gehört.

7
Marc B

Mir ist noch etwas anderes an deiner Codierung aufgefallen .... schau

INSERT INTO reports_services (id,title,description,cost) VALUES (0, 'test title', 'test decription ', '3.80')

in Ihrem "CREATE TABLE" Code haben Sie die ID auf "AUTO_INCREMENT" gesetzt, was bedeutet, dass automatisch ein Ergebnis für dieses Feld generiert wird habe eine 0 da ... idk, wenn das deine Art ist, uns mitzuteilen, dass du es leer gelassen hast, weil es auf AUTO_INC gesetzt ist. oder wenn das der tatsächliche Code ist, den Sie haben ... wenn es der Code ist, den Sie haben, sollten Sie nicht nur versuchen, Daten an einen Feldsatz zu senden, um sie automatisch zu generieren, sondern der RICHTIGE WEG, dies zu tun, wäre FALSCH

'0',

du legst

0,

lol .... also das könnte einiges des Problems verursachen ... Ich habe auch gerade bemerkt, dass im Code nach "Testbeschreibung" ein Leerzeichen vor dem "...." steht, das möglicherweise auch etwas abwirft ... Ich hoffe, das hilft n vielleicht, ein anderes Problem zu lösen, über das Sie sich gerade die Haare ziehen .... Apropos .... Ich muss mein Problem herausfinden, bevor ich mir die Haare ausreiße .. ... Viel Glück.. :)

AKTUALISIEREN.....

Ich hätte fast vergessen ... wenn Sie die 0 dort haben, um zu zeigen, dass sie leer ist ... könnten Sie "Testtitel" als ID und "Testbeschreibung" als Titel eingeben und dann "3.whatever cents" für die Beschreibung hinterlassen "cost" leer ...... das könnte der Grund sein, warum das Maximum überschritten wurde, denn wenn ich mich nicht irre, haben Sie es auf NOT NULL gesetzt .... und Sie haben es null gelassen ... also hat es etwas erzwungen ... vielleicht lol

4
Optiq