Ralf Heumann: MySQL type - Decimal, Smallint, ..?

Hallo,

ich möchte eine Datenbankstruktur für eine Produktsuche anlegen. Die Spalte 'pcmsizecode' kann Einträge von ungefähr 1 - 9000 beinhalten. Allerdings können auch etwa Werte wie z.B 22.5 auftauchen. Dann allerdings nur mit der Nachkommastelle .5

Es gibt auch Produkte die hier gar keinen Wert haben, sprich die Spalte leer ist. Daher soll das Feld auch als Standard leer bleiben.

Was nutze ich hier am besten für eine Einstellung beim Anlegen der Datenbank?

Vielen Dank für die Hilfe

Gruß Ralf

  1. hi,

    Die Spalte 'pcmsizecode' kann Einträge von ungefähr 1 - 9000 beinhalten. Allerdings können auch etwa Werte wie z.B 22.5 auftauchen. Dann allerdings nur mit der Nachkommastelle .5

    Und für was steht der 'pcmsizecode'?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Und für was steht der 'pcmsizecode'?

      Was das genau aussagt weiß ich nicht. Ich habe die Daten von einer Excel-File übernommen, in welcher all diese Produktdaten stehen. Die Spalte nennt sich hier genauso. Es handelt sich dabei um eine Produktdatenbank für Kondensatoren.

      Naja die Spalte möchte ich so einfach ebenfalls benennen.

      Gruß Ralf

      1. hi,

        Und für was steht der 'pcmsizecode'?

        Was das genau aussagt weiß ich nicht. Ich habe die Daten von einer Excel-File übernommen, in welcher all diese Produktdaten stehen. Die Spalte nennt sich hier genauso. Es handelt sich dabei um eine Produktdatenbank für Kondensatoren.

        Gut, wenn der zu erwartende Wertbereich so ist, wie du schriebst - dann würde ich wohl zu einem DECIMAL(6,1) tendieren.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Gut, wenn der zu erwartende Wertbereich so ist, wie du schriebst - dann würde ich wohl zu einem DECIMAL(6,1) tendieren.

          hmm ich hatte es bereits einmal mit einem DECIMAL(6,2) ausprobiert. Allerdings nutzt er mir als Standardwert dann bei leereingaben immer "0.00"

          Bei DECIMAL(6,1) dann also "0.0". Gibt es eine Möglichkeit, dass der Standardwert _leer_ ist? Ansonsten werden ja unnötig Daten in die DB geschrieben. Desweiteren müsste ich dann im Code noch den Wert "0.0" 'ausklammern'

          Gruß Ralf

          1. Müsste ich vielleicht NULL auf true setzen? Oder was macht "NULL" ? Habe jetzt noch nicht allzuoft Datenbanken aufgesetzt.

            1. hi,

              Müsste ich vielleicht NULL auf true setzen? Oder was macht "NULL" ?

              pcmsizecode  DECIMAL(6,1) NULL DEFAULT NULL

              pcmsizecode  DECIMAL(6,1) NULL
              sollte eigentlich auch schon reichen, da MySQL dann als Default NULL annimmt.

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. pcmsizecode  DECIMAL(6,1) NULL

                Yup das reicht aus. Jetzt haben wir es fast geschafft ;)
                Beim Import der Daten aus der CSV Datei speichert er mir nun alles fein in der DB. Allerdings schreibt er trotzdem wieder bei pcmsizecode (obwohl in der CSV-Datei bei dieser Spalte nichts drinsteht - also 2 Semikolon nebeneinander) "0.0" in die Spalte..

                Wenn ich einen neuen Wert per Hand eintrage ist das kein Problem. Muss ich nun per SQL alle 0.0 Werte in "NULL" ändern lassen oder geht das schon beim Import?

                Noch eine letzte Frage: Das mit der MySQL collation Sort "latin1_swedish_ci" usw. kannte ich bisher noch gar nicht. Ich hatte das in meinen Spalten in "latin1_german1_ci" geändert. Allerdings gab es bei einer SQL-Query einen Fehler "Illegal mix of collations (irgendwas,IMPLICIT) and.." oder so ähnlich.
                Ich habe es nun auf "utf8_general_ci" geändert? Ist das korrekt oder was muss ich hier tun?

                1. Hallo Ralf,

                  Wenn ich einen neuen Wert per Hand eintrage ist das kein Problem. Muss ich nun per SQL alle 0.0 Werte in "NULL" ändern lassen oder geht das schon beim Import?

                  gibt es echte Werte 0.0? Wenn nein, sollte Dir

                  UPDATE tabelle SET spalte = NULL WHERE spalte = 0.0

                  weitere Arbeit abnehmen.

                  Freundliche Grüße

                  Vinzenz

                  1. gibt es echte Werte 0.0? Wenn nein, sollte Dir

                    UPDATE tabelle SET spalte = NULL WHERE spalte = 0.0

                    weitere Arbeit abnehmen.

                    Nein es gibt keine 0.0 Werte. Diese werden allerdings trotz leerem Feld in der CSV-Datei und NULL in der Spalte als 0.0 eingetragen (warum auch immer).

                    Per SQL Befehl habe ich diese 0.0 Felder auch schon mit Null ersetzt. Nur war die Frage ob das auch per CSV-Import schon geht?! Denn ich möchte dass der Kunde später selbst noch neue Produktdaten hier importieren kann, der keine SQL Kenntnisse hat.

                    Achja, vielen Dank für Eure Hilfe :))

                    Gruß Ralf

            2. Hallo

              Oder was macht "NULL"

              NULL, nicht "NULL", auch nicht 0 bedeutet, dass keine Daten vorhanden sind, auch kein Leerstring, nicht die Zahl 0. Ja, für Deinen Zweck ist NULL, wie wahsaga bereits schrieb, genau das Richtige.

              Freundliche Grüße

              Vinzenz