Wie groß ist die Spaltengröße von int(11)
in mysql in Bytes?
Und Maximalwert, der in diesen Spalten gespeichert werden kann?
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)
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.
Gemäß hier benötigt int(11)
4 Bytes Speicherplatz, dh 32 Bits Speicherplatz mit 2^(31) = 2147483648
max value und -2147483648
min value. Ein Bit ist für Zeichen.
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:
100
100
bei der Ausgabe (nicht 0
oder 00
)Das einzige, was (2)
tun wird, ist wenn auch nullofill angegeben wird:
1
wird 01
angezeigt. 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.
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.
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
Obwohl diese Antwort unwahrscheinlich ist, ist meiner Meinung nach die folgende Klarstellung angebracht:
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
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
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).