Spaltentyp bei Preisen
alex s.
- datenbank
0 Tom0 Alex S.0 Sven Rautenberg0 Tom0 Alex S.0 Sven Rautenberg0 Tom0 Sven Rautenberg0 Tom
0 Tom
hallo zusammen,
welchen spaltentyp muss ich auswählen wenn ich einen preis in der form 123,99 eintragen möchte?
geht das mit DECIMAL? wenn ja wie? weil wenn ich decimal auswähle, schneidet der mir alles hinter dem komma bzw. punkt ab.
danke und gruß
alex s.
Hello,
welchen spaltentyp muss ich auswählen wenn ich einen preis in der form 123,99 eintragen möchte?
geht das mit DECIMAL? wenn ja wie? weil wenn ich decimal auswähle, schneidet der mir alles hinter dem komma bzw. punkt ab.
Im Prinzip ja, aber...
Welche Datenbank hast Du denn im Einsatz?
Es gibt so ein paar Krücken, die das nicht vernünftig implementiert haben.
Liebe Grüße aus http://www.braunschweig.de
Tom
hi
Welche Datenbank hast Du denn im Einsatz?
Es gibt so ein paar Krücken, die das nicht vernünftig implementiert haben.
stimmt, sollte man vielleicht darzu schreiben sorry ;-)
ich arbeite mit einer mySQL Tabelle und möchte meine Ausgaben dort eintragen. Am Ende des monats möchte ich gerne die Preise zusammenrechnen.
Gruß Alex.
Moin!
ich arbeite mit einer mySQL Tabelle und möchte meine Ausgaben dort eintragen. Am Ende des monats möchte ich gerne die Preise zusammenrechnen.
Und wie hast du die Tabelle definiert? Es gibt keinen Spaltentyp "DECIMAL" so, wie es einen Spaltentyp "INT" gibt - man muß die Anzahl der gewünschten Nachkommastellen schon mit angeben, und die Vorkommastellen IIRC auch.
- Sven Rautenberg
Hello,
ich arbeite mit einer mySQL Tabelle und möchte meine Ausgaben dort eintragen. Am Ende des monats möchte ich gerne die Preise zusammenrechnen.
Und wie hast du die Tabelle definiert? Es gibt keinen Spaltentyp "DECIMAL" so, wie es einen Spaltentyp "INT" gibt - man muß die Anzahl der gewünschten Nachkommastellen schon mit angeben, und die Vorkommastellen IIRC auch.
Man muss die Länge der Dezimalzahl einschließlich Vorzeichen angeben. Das Komma (oder der Dezimalpunkt) wird nicht mitgezählt. Allerdings hat MySQL die unangenehme Eigenschaft, keinen echten Rangecheck durchzuführen. Es wird also kein Fehler ausgelöst. Wenn Du also eine Zahl einträgst, die länger ist, als die Datenbank sie speichern kann, dann wird 99999,99 eingetragen, hier bei Decimal(7,2). Beim Dezimaltyp wird auch tatsächlich soviel gespeichert, wie angezeigt wird, während ein bigint(10) nur die Anzeige auf 10 Stellen reduzieren würde, aber trotzdem vier Byte abspeichern würde.
Liebe Grüße aus http://www.braunschweig.de
Tom
hallo
genau das war es, ich hatte DECIMAL(10,0) drin.
Vielen Dank für eure Tipps
ciao Alex S.
P.s. hätte nicht gedacht so spät noch eine antwort zu erhalten - schlaft ihr eigentlich auch ab und zu ;-) ?
Moin!
Allerdings hat MySQL die unangenehme Eigenschaft, keinen echten Rangecheck durchzuführen. Es wird also kein Fehler ausgelöst.
Was erwartest du? Es ist MySQL, die Datenbank, bei der man alles selber machen muß, was über das Speichern einzelner Einträge in eine Tabelle hinausgeht.
- Sven Rautenberg
Hello,
Allerdings hat MySQL die unangenehme Eigenschaft, keinen echten Rangecheck durchzuführen. Es wird also kein Fehler ausgelöst.
Was erwartest du? Es ist MySQL, die Datenbank, bei der man alles selber machen muß, was über das Speichern einzelner Einträge in eine Tabelle hinausgeht.
Ja, das ist ja auch nicht schlimm, wenn man daran denkt. Dazu muss man es nur wissen.
Was mir nur immer fehlt, ist ein Zentraler Speicherbereich im Kopf der Tabelle, den man abfragen kann, und auch beschreiben. Das wäre dann nämlich eine gute Möglichkeit, einheitliche Regeln (Workarounds für die fehlenden Trigger) in die Scripte zu verfrachten. Selbstverstänlich kann man die auch in einer separaten Tabelle speichern ...
So mache ich es bisher.
Liebe Grüße aus http://www.braunschweig.de
Tom
Moin!
Was mir nur immer fehlt, ist ein Zentraler Speicherbereich im Kopf der Tabelle, den man abfragen kann, und auch beschreiben. Das wäre dann nämlich eine gute Möglichkeit, einheitliche Regeln (Workarounds für die fehlenden Trigger) in die Scripte zu verfrachten. Selbstverstänlich kann man die auch in einer separaten Tabelle speichern ...
Tabellenkommentar?
Oder PostgresQL verwenden. Das macht auch lizenzrechtlich wesentlich weniger Probleme. Weil: Das hat Trigger, Constraints und den ganzen Krempel, der bei MySQL noch fehlt.
- Sven Rautenberg
Hello,
Was mir nur immer fehlt, ist ein Zentraler Speicherbereich im Kopf der Tabelle, den man abfragen kann, und auch beschreiben. Das wäre dann nämlich eine gute Möglichkeit, einheitliche Regeln (Workarounds für die fehlenden Trigger) in die Scripte zu verfrachten. Selbstverstänlich kann man die auch in einer separaten Tabelle speichern ...
Tabellenkommentar?
Ging aus irgendwelchen Gründen nicht. Und zu kurz ist der auch. Ich hatte das schon mal untersucht.
Oder PostgresQL verwenden. Das macht auch lizenzrechtlich wesentlich weniger Probleme. Weil: Das hat Trigger, Constraints und den ganzen Krempel, der bei MySQL noch fehlt.
Das werde ich dann wohl mal in Angriff nehmen. Ich habe hier noch eine Informix-Lizenz, aber die Unterstützung für Informix beißt sich leider mit der PHP-Version. Jedenfalls bekomme ich es nicht wieder zum Laufen.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hello,
Welche Datenbank hast Du denn im Einsatz?
Es gibt so ein paar Krücken, die das nicht vernünftig implementiert haben.stimmt, sollte man vielleicht darzu schreiben sorry ;-)
ich arbeite mit einer mySQL Tabelle und möchte meine Ausgaben dort eintragen. Am Ende des monats möchte ich gerne die Preise zusammenrechnen.
Wie erzeugst Du die Spalte und was bekommst Du bei einem
show columns from $table;
im Resultset?
ALTER TABLE ARTIKEL
ADD PREIS
DECIMAL(10,2)
würde die Spalte Preis mit 10 Stellen gesamt incl. Vorzeichen und davon zwei Dezimalstellen anlegen
Liebe Grüße aus http://www.braunschweig.de
Tom