Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL INT-größen für dummies?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SQL INT-größen für dummies?

    Hallöchen,


    ich hatte da heute Vormittag schon a wenig gegoogelt aber eigentlich immer die gleichen Größenangaben gefunden die gleich folgen. Aber von was ist die Rede? Sind das max. Byts die einzahl groß sein kann oder was? Für mich sind diese Angaben irgend wie nicht sehr hilfreich kann damit nicht wirklich einschätzen wo da die grenzen sind =(

    Code:
    TINYINT = Ein 1-Byte-Integer, Bereich mit Vorzeichen ist -128 bis 127, ohne Vorzeichen 0 bis 255
    SMALLINT = Ein 2-Byte-Integer, Bereich mit Vorzeichen ist -32.768 bis 32.767, ohne Vorzeichen 0 bis 65.535
    MEDIUMINT = Ein 3-Byte-Integer, Bereich mit Vorzeichen ist -8.388.608 bis 8.388.607, ohne Vorzeichen 0 bis 16.277.215
    INT = Ein 4-Byte-Integer, Bereich mit Vorzeichen ist -2.147.483.648 bis 2.147.483.647, ohne Vorzeichen 0 bis 4.294.967.295
    BIGINT = Ein 8-Byte-Integer, Bereich mit Vorzeichen ist -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807, ohne Vorzeichen 0 bis 18.446.744.073.709.551.615
    Genauso was mit "mit" und "ohne" Vorzeichen gemeint ist... sehe dazu jetzt nicht wirklich eine Option in PMA

  • #2
    Das steht doch eindeutig da. Was ist unklar?

    Kommentar


    • #3
      Also "Bereich mit Vorzeichen ist -128 bis 127" ist also Eindeutig?
      Verdammt wozu schreiben wir noch Maßeinheiten oder Währungs-Symbole neben Zahlen....

      Also passen in TINYINT -128 bis +127 Äpfel in die Datenbank, cool! =)

      Kommentar


      • #4
        Zitat von Paykoman Beitrag anzeigen
        Also "Bereich mit Vorzeichen ist -128 bis 127" ist also Eindeutig?
        Ja.

        Zitat von Paykoman Beitrag anzeigen
        Verdammt wozu schreiben wir noch Maßeinheiten oder Währungs-Symbole neben Zahlen....

        Also passen in TINYINT -128 bis +127 Äpfel in die Datenbank, cool! =)
        Integer-Werte sind dimensionslos. Ein Wert vom Typ SIGNED TINYINT kann eine Ganzzahl im Bereich von -128 bis 127 sein.

        Mir scheint dir fehlt wichtiges Grundlagenwissen:

        https://de.wikipedia.org/wiki/Integer_(Datentyp)

        Kommentar


        • #5
          nun also geht es dort um die Zahl an sich eben -128 bis 127

          Gut also ist bei bigint ja bei 2 Mrd. Ende ausser ohne Vorzeichen, da würde ich jetzt eben '-' oder '+' verstehen aber positive Zahlen werden i.d.R. ja ohne Vorzeichen gespeichert also ging es dann bis 4mrd ?

          Kommentar


          • #6
            Zitat von Threadtitel
            SQL INT-größen

            [MOD: Verschoben von PHP-Einsteiger]
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Zitat von Paykoman Beitrag anzeigen
              Gut also ist bei bigint ja bei 2 Mrd. Ende ausser ohne Vorzeichen, da würde ich jetzt eben '-' oder '+' verstehen aber positive Zahlen werden i.d.R. ja ohne Vorzeichen gespeichert also ging es dann bis 4mrd ?
              Positive Zahlen können mit oder ohne Vorzeichen gespeichert werden. Wenn also nur der positive Wertebereich benötigt wird, kann ein vorzeichenloser Typ verwendet werden. Dadurch spart man sich ein Bit, um den dann der Wertebereich erweitert wird.

              Kommentar


              • #8
                Zitat von Paykoman Beitrag anzeigen
                nun also geht es dort um die Zahl an sich eben -128 bis 127

                Gut also ist bei bigint ja bei 2 Mrd. Ende ausser ohne Vorzeichen, da würde ich jetzt eben '-' oder '+' verstehen aber positive Zahlen werden i.d.R. ja ohne Vorzeichen gespeichert also ging es dann bis 4mrd ?
                Rund 4,3 Millarden trifft auf int zu, Bigint geht dann ohne Vorzeichen bis 18.446.744.073.709.551.615, das wären dann rund 18,4 Trillionnen

                Kommentar


                • #9
                  Zitat von Paykoman Beitrag anzeigen
                  Genauso was mit "mit" und "ohne" Vorzeichen gemeint ist... sehe dazu jetzt nicht wirklich eine Option in PMA
                  Das taucht irgendwo als signed/unsigned auf.

                  PS: Mit Mysql musst du bei den Wertebereichen besoders aufpassen. In der Standardkonfiguration kürzt dir Mysql den Wert ohne Warnung. Schreibst du z.B. 1000 in eine tinyint Spalte, speichert Mysql eine 127 ab. Das ist in den meisten Fällen ziemlich schlecht...

                  PSS: das ohne Warnung ist gelogen, es gibt eine Warnung...die müssen aber aktiv abgeholt werden und solche Fehler passieren eher im Produktivbetreib als bei der Entwicklung und da nutzt dir die Warnung auch nicht.

                  Kommentar


                  • #10
                    Gut alles klar, herzlichen Dank für die Aufklärung! Supi! =)

                    PS: falls wer schon mal mit Socket.io gearbeitet hat könnte mir vllt hier auch weiter helfen *g

                    Kommentar


                    • #11
                      Zitat von erc Beitrag anzeigen
                      PS: Mit Mysql musst du bei den Wertebereichen besoders aufpassen. In der Standardkonfiguration kürzt dir Mysql den Wert ohne Warnung. Schreibst du z.B. 1000 in eine tinyint Spalte, speichert Mysql eine 127 ab. Das ist in den meisten Fällen ziemlich schlecht...
                      Code:
                      CREATE TABLE `test` (
                        `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
                        `foo` tinyint(3) unsigned DEFAULT '0',
                        PRIMARY KEY (`id`)
                      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

                      Datenbank: MariaDB 10.0.28-MariaDB-0+deb8u1
                      Query: INSERT INTO test(foo) VALUES(1000);
                      Ergebnis: 127

                      Datenbank: MySQL 5.7.16-0ubuntu0.16.04.1
                      Query: INSERT INTO test(foo) VALUES(1000)
                      Ergebnis: Out of range value for column 'foo' at row 1

                      Glaube bei beiden ist es die Standardeinstellung vom SQL_MODE, der für dieses Verhalten verantwortlich ist.

                      Kommentar

                      Lädt...
                      X