Wie groß ist die Spalte int(11)
in MySQL in Bytes?
Und Maximalwert, der in diesen Spalten gespeichert werden kann?
mysql
vor meiner Ankunft markiert werden . Thx
Wie groß ist die Spalte int(11)
in MySQL in Bytes?
Und Maximalwert, der in diesen Spalten gespeichert werden kann?
mysql
vor meiner Ankunft markiert werden . Thx
Antworten:
Ein INT
wird immer 4 Bytes sein, egal welche Länge angegeben ist.
TINYINT
= 1 Byte (8 Bit)SMALLINT
= 2 Bytes (16 Bit)MEDIUMINT
= 3 Bytes (24 Bit)INT
= 4 Bytes (32 Bit)BIGINT
= 8 Bytes (64 Bit).Die Länge gibt nur an, wie viele Zeichen beim Auswählen von Daten mit dem MySQL-Befehlszeilenclient aufgefüllt werden sollen. 12345 gespeichert als int(3)
wird immer noch als 12345 int(10)
angezeigt , aber wenn es gespeichert wurde , würde es immer noch als 12345 angezeigt, aber Sie hätten die Möglichkeit, die ersten fünf Ziffern aufzufüllen. Wenn Sie beispielsweise hinzufügen, wird ZEROFILL
es als 0000012345 angezeigt.
... und der Maximalwert ist 2147483647 (signiert) oder 4294967295 (nicht signiert)
INT ( x ) unterscheidet sich nur in Bezug auf die Anzeige , dh die Zahl wird in x- Ziffern angezeigt und ist nicht auf 11 beschränkt. Sie koppeln es mitZEROFILL
, wodurch die Nullen vorangestellt werden, bis sie Ihrer Länge entsprechen.
Also für eine beliebige Anzahl von x inINT(x)
Wenn der gespeicherte Wert weniger Ziffern als x hat , ZEROFILL
werden Nullen vorangestellt.
INT (5) ZEROFILL mit dem gespeicherten Wert von 32 zeigt 00032 an.
INT (5) mit dem gespeicherten Wert von 32 zeigt 32 an
INT mit dem gespeicherten Wert von 32 zeigt 32 an
Wenn der gespeicherte Wert mehr Ziffern als x hat , wird er so angezeigt, wie er ist.
INT (3) ZEROFILL mit dem gespeicherten Wert von 250000 zeigt 250000 an.
INT (3) mit dem gespeicherten Wert von 250000 zeigt 250000 an
INT mit dem gespeicherten Wert von 250000 zeigt 250000 an
Der in der Datenbank gespeicherte tatsächliche Wert ist nicht betroffen, die Größe bleibt unverändert, und jede Berechnung verhält sich normal.
Dies gilt auch für BIGINT, MEDIUMINT, SMALLINT und TINYINT.
ZEROFILL
.
Nach hier , int(11)
wird 4 Byte Platz nehmen , die 32 - Bit - Raum mit ist 2^(31) = 2147483648
Maximalwert und -2147483648
Minimalwert. Ein Bit ist für Zeichen.
Wie bereits erwähnt, werden die Mindest- / Maximalwerte, die in der Spalte gespeichert werden können, und der Speicherbedarf in Byte nur durch den Typ und nicht durch die Länge definiert.
Viele dieser Antworten sagen, dass die (11)
Teil nur die Anzeigebreite beeinflusst, was nicht genau stimmt, aber meistens.
Eine Definition int(2)
mit keinem zerofill angegeben werden:
100
100
wenn der Ausgang (nicht 0
oder00
)Das einzige, was der (2)
Wille tun wird, ist, wenn auch Nullfüllung angegeben ist :
1
wird angezeigt 01
.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,
`zf1` int(10) ZEROFILL NOT NULL,
`zf2` int(3) ZEROFILL NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `mytable`
(`int1`, `int2`, `zf1`, `zf2`)
VALUES
(10000, 10000, 10000, 10000),
(100, 100, 100, 100);
select * from mytable;
welches ausgegeben wird:
+----+-------+-------+------------+-------+
| id | int1 | int2 | zf1 | zf2 |
+----+-------+-------+------------+-------+
| 1 | 10000 | 10000 | 0000010000 | 10000 |
| 2 | 100 | 100 | 0000000100 | 100 |
+----+-------+-------+------------+-------+
Diese Antwort wurde gegen MySQL 5.7.12 für Linux getestet und kann für andere Implementierungen variieren oder nicht.
Wie groß ist die Spalte von int (11) in MySQL in Bytes?
(11)
- Dieses Attribut vom int
Datentyp hat nichts mit der Größe der Spalte zu tun. Es ist nur die Anzeigebreite des ganzzahligen Datentyps. Ab 11.1.4.5. Numerische Typattribute :
MySQL unterstützt eine Erweiterung zum optionalen Angeben der Anzeigebreite von ganzzahligen Datentypen in Klammern nach dem Basisschlüsselwort für den Typ. Beispielsweise gibt INT (4) ein INT mit einer vierstelligen Anzeigebreite an.
Eine gute Erklärung hierfür finden Sie hier.
Zusammenfassend: Die Zahl N in int (N) wird häufig durch die maximal zulässige Größe der Spalte verwechselt, wie dies im Fall von varchar (N) der Fall ist.
Dies ist jedoch bei Integer-Datentypen nicht der Fall. aufgefüllt Die Zahl N in Klammern ist nicht die maximale Größe für die Spalte, sondern lediglich ein Parameter, der MySQL in welcher Breite die Spalte angezeigt werden soll, wenn die Daten der Tabelle über MySQL angezeigt werden Konsole (wenn Sie das ZEROFILL-Attribut verwenden).
Die Zahl in Klammern gibt MySQL an, mit wie vielen Nullen eingehende Ganzzahlen aufgefüllt werden sollen. Beispiel: Wenn Sie ZEROFILL für eine Spalte verwenden, die auf INT (5) gesetzt ist und die Zahl 78 eingefügt ist, füllt MySQL diesen Wert mit Nullen auf, bis die Zahl der Zahl in Klammern entspricht. dh 78 wird zu 00078 und 127 wird zu 00127. Um es zusammenzufassen: Die Zahl in Klammern wird für Anzeigezwecke verwendet.
In gewisser Weise ist die Zahl in Klammern nutzlos, es sei denn, Sie verwenden das Attribut ZEROFILL.
Die Größe für das int würde also gleich bleiben, dh -2147483648 bis 2147483648 für signiert und 0 bis 4294967295 für nicht signiert(~ 2,15 Milliarden und 4,2 Milliarden, was einer der Gründe ist, warum Entwickler die Geschichte hinter der Zahl N in Klammern nicht kennen, da sie die Datenbank kaum beeinflusst, es sei denn, sie enthält mehr als 2 Milliarden Zeilen) und in Bytes wäre 4 Bytes .
Weitere Informationen zur Größe / zum Bereich von Integer-Typen finden Sie im MySQL-Handbuch
Obwohl es unwahrscheinlich ist, dass diese Antwort gesehen wird, halte ich die folgende Klarstellung für wert:
Ein bisschen Detail
Die Anzeigebreite soll anscheinend einige Metadaten darüber liefern, wie viele Nullen in einer mit Null gefüllten Zahl angezeigt werden sollen.
Die Länge einer von einer Abfrage zurückgegebenen Nummer wird NICHT begrenzt, wenn diese Nummer die angegebene Anzeigebreite überschreitet.
Um zu wissen, welche Länge / Breite für einen ganzzahligen Datentyp in MySQL tatsächlich zulässig ist , lesen Sie die Liste und den Link: ( Typen: 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 sind als ZEROFILL-Spalten angegeben
ODER
für den Fall, dass die Daten in eine Anwendung gezogen werden und diese Anwendung die Daten sammelt Anzeigebreite für andere Polster.
Primärreferenz: https://blogs.oracle.com/jsmyth/entry/what_does_the_11_mean
n
zu entfernen, also ... ja, das ist Bullcrap. Es macht nur etwas mit Nullfüllung.
In MySQL hat die Ganzzahl int(11)
eine Größe von 4 Bytes, was 32 Bit entspricht.
Der vorzeichenbehaftete Wert ist: - 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 :
Mit MySQL können Sie eine "Breite" für ganzzahlige Typen wie INT (11) angeben. Dies ist für die meisten Anwendungen bedeutungslos: Es schränkt den zulässigen Wertebereich nicht ein, sondern gibt lediglich die Anzahl der Zeichen an, die die interaktiven Tools von MySQL für Anzeigezwecke reservieren. Für Speicher- und Berechnungszwecke ist INT (1) identisch mit INT (20).
4294967295 ist die Antwort, da int (11) maximal 11 Stellen IMO anzeigt