it-swarm.com.de

Wie groß ist die Spalte von int (11) in mysql in Byte?

Wie groß ist die Spaltengröße von int(11) in mysql in Bytes?

Und Maximalwert, der in diesen Spalten gespeichert werden kann?

398
Gaurav

Eine Variable INT ist immer 4 Byte, unabhängig von der angegebenen Länge.

  • TINYINT = 1 Byte (8 Bit)
  • SMALLINT = 2 Bytes (16 Bit)
  • MEDIUMINT = 3 Byte (24 Bit)
  • INT = 4 Bytes (32 Bit)
  • BIGINT = 8 Byte (64 Bit).

Die Länge gibt lediglich an, wie viele Zeichen angezeigt werden sollen, wenn Daten mit dem Befehlszeilenclient mysql ausgewählt werden.

... und der Maximalwert ist 2147483647 (signiert) oder 4294967295 (unsigniert)

569
Matt MacLean

INT (somenumber) macht einen Unterschied nur in Bezug auf die Anzeige , dh es wird in der Zahl in 'somenumber' Ziffern angezeigt und ist nicht nur auf 11 beschränkt. Sie koppeln es mit ZEROFILL, wobei die Nullen vorangestellt werden, bis sie Ihrer Länge entsprechen 

Beachten Sie, dass der in der Datenbank gespeicherte Wert nicht betroffen ist. Alle Berechnungen verhalten sich dennoch so wie sie sind. 

Bemerkungen :

  • wenn der Wert weniger als 'somenumber' enthält, werden ZEROFILL Nullen vorangestellt. 

    INT (5) ZEROFILL mit dem gespeicherten Wert von 32 zeigt 00032
    INT (5) mit dem gespeicherten Wert von 32 zeigt 32
    INTmit dem gespeicherten Wert von 32 zeigt 32

  • wenn der Wert mehr als 'somenumber' enthält, wird der gespeicherte Wert angezeigt. 

    INT (3) ZEROFILL mit dem gespeicherten Wert von 250000 wird angezeigt 250000
    INT (3) mit dem gespeicherten Wert von 250000 zeigt 250000
    INTmit dem gespeicherten Wert von 250000 zeigt 250000

Ähnliches gilt auch für BIGINT, MEDIUMINT, SMALLINT und TINYINT.

118
priyabagus

Gemäß hier benötigt int(11) 4 Bytes Speicherplatz, dh 32 Bits Speicherplatz mit 2^(31) = 2147483648 max value und -2147483648min value. Ein Bit ist für Zeichen.

99
Santosh Linkha

Wie andere bereits gesagt haben, werden die Mindest-/Maximalwerte, die die Spalte speichern kann, und der Speicherbedarf in Byte nur durch den Typ und nicht durch die Länge definiert. 

Viele dieser Antworten besagen, dass der (11)-Teil nur die Anzeigebreite beeinflusst, was jedoch nicht genau der Fall ist.

Eine Definition von int(2) mit keine Nullangabe angegeben wird:

  • akzeptiere immer noch einen Wert von 100
  • still Anzeige einen Wert von 100 bei der Ausgabe (nicht 0 oder 00)
  • Anzeigebreite ist die Breite des größten Werts, der von der Auswahlabfrage ausgegeben wird.

Das einzige, was (2) tun wird, ist wenn auch nullofill angegeben wird:

  • ein Wert von 1 wird 01 angezeigt. 
  • Bei der Anzeige von Werten hat die Spalte immer ein Breite des maximal möglichen Werts, den die Spalte annehmen kann}, der 10 Stellen für eine ganze Zahl sind, anstelle der Mindestbreite, die erforderlich ist, um den größten Wert anzuzeigen, den die Spalte anzeigen muss für in dieser spezifischen select-Abfrage, die viel kleiner sein könnte.
  • Die Spalte kann immer noch einen Wert annehmen, der die Länge überschreitet, und diesen Werten werden jedoch keine 0 vorangestellt.

Der beste Weg, um alle Nuancen zu sehen, ist zu laufen:

CREATE TABLE `mytable` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `int1` int(10) NOT NULL,
    `int2` int(3) NOT NULL,
    `zerofill1` int(10) ZEROFILL NOT NULL,
    `zerofill2` int(3) ZEROFILL NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `mytable` 
(`int1`, `int2`, `zerofill1`, `zerofill2`) 
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);

select * from mytable;

welche ausgegeben werden:

+----+-------+-------+------------+-----------+
| id | int1  | int2  | zerofill1  | zerofill2 |
+----+-------+-------+------------+-----------+
|  1 | 10000 | 10000 | 0000010000 |     10000 |
|  2 |   100 |   100 | 0000000100 |       100 |
+----+-------+-------+------------+-----------+

Beachten Sie, dass int1-Spalte eine viel geringere Anzeigebreite als zerofill2 hat, obwohl die Länge größer ist.

Diese Antwort wurde mit MySQL 5.7.12 für Linux getestet und kann für andere Implementierungen abweichen.

31
Programster

Wie groß ist die Spalte von int (11) in mysql in Byte? 

(11) - Dieses Attribut des Datentyps int hat nichts mit der Spaltengröße zu tun. Es ist nur die Anzeigebreite des Integer-Datentyps. Von 11.1.4.5. Numerische Typattribute

MySQL unterstützt eine Erweiterung zur optionalen Angabe der Anzeige Breite ganzzahliger Datentypen in Klammern nach dem Basisschlüsselwort für den Typ. Beispielsweise gibt INT (4) ein INT mit einer Anzeige an Breite von vier Ziffern.

29
ks1322

Eine gute Erklärung dafür finden Sie hier

Zusammenfassend: Die Zahl N in int (N) wird oft durch die maximal zulässige Größe der Spalte verwechselt, wie dies bei varchar (N) der Fall ist. 

Dies ist jedoch bei Integer-Datentypen nicht der Fall. Die Zahl N in Klammern ist nicht die maximale Größe für die Spalte, sondern lediglich ein Parameter, mit dem MySQL angegeben wird, bei welcher Breite die Spalte angezeigt werden soll, wenn die Tabellendaten über angezeigt werden die MySQL-Konsole (wenn Sie das ZEROFILL-Attribut verwenden).

Die Zahl in Klammern gibt MySQL an, mit wie vielen Nullen ankommende Ganzzahlen aufgefüllt werden. Beispiel: Wenn Sie ZEROFILL für eine Spalte verwenden, die auf INT (5) gesetzt ist und die Nummer 78 eingefügt ist, füllt MySQL diesen Wert mit Nullen, bis die Nummer die in Klammern angegebene Nummer erfüllt. 78 wird also 00078 und 127 wird 00127. Um es zusammenzufassen: Die Zahl in Klammern wird zu Anzeigezwecken verwendet.
Die Zahl in Klammern ist gewissermaßen nutzlos, es sei denn, Sie verwenden das ZEROFILL-Attribut.

Die Größe für das int würde also gleich bleiben, dh -2147483648 bis 2147483648 für signierte und 0 bis 4294967295 für unsignierte (~ 2,15 Milliarden und 4,2 Milliarden). Dies ist einer der Gründe für Entwickler Die Geschichte hinter der Zahl N ist in Klammern nicht bekannt, da sie die Datenbank kaum beeinflusst, wenn sie nicht mehr als 2 Milliarden Zeilen enthält, und in Bytes wären dies 4 Bytes.

Weitere Informationen zu Integer-Typengröße/Bereich finden Sie in MySQL-Handbuch

15
shashi009

Obwohl diese Antwort unwahrscheinlich ist, ist meiner Meinung nach die folgende Klarstellung angebracht: 

  • das (n) hinter einem Integer-Datentyp in MySQL gibt die Anzeigebreite an
  • die Anzeigebreite begrenzt NICHT die Länge der von einer Abfrage zurückgegebenen Anzahl
  • die Anzeigebreite begrenzt die Anzahl der gefüllten Nullen für eine mit Null gefüllte Spalte, so dass die Gesamtzahl mit der Anzeigebreite übereinstimmt (solange die tatsächliche Anzahl die Anzeigebreite nicht überschreitet; in diesem Fall wird die Anzahl unverändert angezeigt)
  • die Anzeigebreite ist auch als nützliches Werkzeug für Entwickler gedacht, um zu ermitteln, auf welche Länge der Wert aufgefüllt werden soll

A BIT OF DETAIL
Die Anzeigebreite soll anscheinend einige Metadaten darüber bereitstellen, wie viele Nullen in einer mit Null gefüllten Zahl angezeigt werden sollen.
.__ Es begrenzt NICHT die Länge einer von einer Abfrage zurückgegebenen Zahl, wenn diese Zahl die angegebene Anzeigebreite überschreitet.
Um zu wissen, welche Länge/Breite für einen Integer-Datentyp in MySQL tatsächlich zulässig ist, siehe Liste & Link: ( Types: TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT );
Nach alledem können Sie davon ausgehen, dass die Anzeigebreite keinen Einfluss auf die Ergebnisse einer Standardabfrage hat, es sei denn, die Spalten werden als ZEROFILL-Spalten angegeben
ODER 
Falls die Daten in eine Anwendung geladen werden und diese Anwendung die Anzeigebreite erfasst, um sie für eine andere Art von Auffüllung zu verwenden.

Hauptreferenz: https://blogs.Oracle.com/jsmyth/entry/what_does_the_11_mean

10
MER

In MySQL hat die ganze Zahl int(11) eine Größe von 4 Bytes, was 32 Bit entspricht.

Der signierte Wert lautet: -2^(32-1) to 0 to 2^(32-1)-1 = -2147483648 to 0 to 2147483647

Vorzeichenlose Werte sind: 0 to 2^32-1 = 0 to 4294967295

5
Sachin Agrawal

nach diesem Buch :

In MySQL können Sie eine Breite für ganzzahlige Typen angeben, z. B. INT (11) . Dies ist für die meisten Anwendungen bedeutungslos: Es beschränkt nicht die zulässigen Wertebereich, gibt jedoch einfach die Anzahl der Zeichen an Die interaktiven Tools von MySQL werden für die Anzeige reserviert. Zum Speicher- und Berechnungszwecke, INT (1) ist identisch mit INT (20).