636 Stimmen

Was ist die Größe der Spalte int(11) in mysql in Bytes?

Was ist die Größe der Spalte von int(11) in mysql in Bytes?

Und der maximale Wert, der in diesen Spalten gespeichert werden kann?

2 Stimmen

Mögliches Duplikat von Wie groß ist ein SQL Int(N)?

2 Stimmen

@cellepo eine ist generische Sql die andere ist spezifisch für mysql (plus diese hat viel mehr Ansichten). Wenn Sie auf eine Dupe-Jagd gehen wollen und ich sie schnell mit einer Abstimmung schließen soll, besuchen Sie SOBotics chatten und mich anpingen. Aber derjenige, der schließen soll, muss getaggt sein mysql vor meiner Ankunft. Vielen Dank

11 Stimmen

Hallo, Leute. Es ist möglicherweise ein Duplikat, aber es ist suchfreundlicher. Die meisten Leute suchen wie diese mit int(11). und es ist die Lösung der Fragen von anderen Menschen. Sie können seine Anzahl der Ansicht im Vergleich zu anderen zu überprüfen. und Benutzer finden Sie mehr detaillierte Antwort hier.

891voto

Matt MacLean Punkte 18554

Eine INT ist immer 4 Bytes lang, egal welche Länge angegeben wird.

  • 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 bei der Auswahl von Daten mit dem mysql-Kommandozeilen-Client aufgefüllt werden sollen. 12345 gespeichert als int(3) wird immer noch als 12345 angezeigt, aber wenn es als int(10) würde immer noch 12345 angezeigt, aber Sie hätten die Möglichkeit, die ersten fünf Ziffern aufzufüllen. Wenn Sie zum Beispiel Folgendes hinzufügen ZEROFILL würde sie als 0000012345 angezeigt.

... und der Höchstwert ist 2147483647 (mit Vorzeichen) oder 4294967295 (ohne Vorzeichen)

167 Stimmen

Was bedeutet dann 11 in int(11) hier.

4 Stimmen

@Gaurav vielleicht 10 ints mit - vor ihm.

1 Stimmen

@experimentX : dann kann der maximale Wert 99999999999 oder etwas anderes sein. bitte geben Sie mir ein Beispiel.

248voto

priyabagus Punkte 2458

INT( x ) wird einen Unterschied machen nur in Bezug auf die Anzeige das heißt, die Zahl in x Ziffern, und nicht auf 11 beschränkt. Sie koppeln es mit ZEROFILL die Nullen vorangestellt, bis sie der Länge entspricht.

Für eine beliebige Anzahl von x en INT(x)

  • wenn der gespeicherte Wert hat weniger Ziffern als x , ZEROFILL werden Nullen vorangestellt.

INT(5) ZEROFILL mit dem gespeicherten Wert von 32 wird angezeigt 00032
INT(5) mit dem gespeicherten Wert von 32 wird angezeigt 32
INT mit dem gespeicherten Wert von 32 wird angezeigt 32

  • wenn der gespeicherte Wert hat mehr Ziffern als x wird sie so angezeigt, wie sie ist.

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

Der tatsächlich in der Datenbank gespeicherte Wert ist davon nicht betroffen, die Größe bleibt gleich, und alle Berechnungen verhalten sich normal.

Dies gilt auch für BIGINT , MEDIUMINT , SMALLINT y TINYINT .

74 Stimmen

Die Länge hat also keine Auswirkung, es sei denn, Sie verwenden Null-Füllung?

48 Stimmen

@developerbmw - Richtig. Die Länge macht absolut nichts, es sei denn, Sie verwenden ZEROFILL .

5 Stimmen

ZEROFILL ist im Wesentlichen ein Mainframe-Kompatibilitätsmodus.

128voto

Santosh Linkha Punkte 13974

Según aquí , int(11) benötigt 4 Byte Speicherplatz, das sind 32 Bits Speicherplatz mit 2^(31) = 2147483648 Maximalwert und -2147483648 Mindestwert. Ein Bit ist für das Vorzeichen.

1 Stimmen

Ihr Beispiel hat 9 Neunen. Können Sie bitte bestätigen, dass Ihr Beispiel korrekt ist? Wenn ja, warum steht dort 10, wenn es 9 Neunen gibt? Ist es die Anzahl der Ziffern plus eine plus das Vorzeichen?

7 Stimmen

Nein, die Höchstzahl ist 4294967295 bei unsigned int, d.h. 2^32. Die Zahl in Klammern hat keinen Einfluss auf den Speichertyp. Wenn Sie mehr als 2^32 benötigen, müssen Sie zu bigint wechseln.

2 Stimmen

+Kieran hat Recht. Die maximale Zahl unterscheidet sich von der in der Antwort. Siehe aquí

52voto

Programster Punkte 11662

Wie bereits gesagt, werden die Mindest-/Maximalwerte, die die Spalte speichern kann, und der Speicherplatz, den sie in Bytes einnimmt, nur durch den Typ und nicht durch die Länge definiert.

Viele dieser Antworten besagen, dass die (11) Teil wirkt sich nur auf die Anzeigebreite aus, was nicht ganz richtig ist, aber meistens.

Eine Definition von int(2) con keine Null-Füllung angegeben wird:

  • noch einen Wert von 100
  • immer noch Anzeige einen Wert von 100 bei der Ausgabe (nicht 0 o 00 )
  • le site Anzeigebreite ist die Breite des größten Wertes, der von der Select-Abfrage ausgegeben wird.

Das einzige, was die (2) tun wird, ist wenn auch Null-Füllung angegeben ist :

  • einen Wert von 1 wird gezeigt 01 .
  • Wenn Werte angezeigt werden, hat die Spalte immer ein Breite des höchstmöglichen Wertes, den die Spalte annehmen kann was bei einer ganzen Zahl 10 Stellen sind, statt der Mindestbreite, die erforderlich ist, um den größten Wert anzuzeigen, den diese Spalte in dieser spezifischen Select-Abfrage anzeigen muss, was viel kleiner sein kann.
  • Die Spalte kann immer noch einen Wert annehmen und anzeigen, der die Länge überschreitet, aber diese Werte werden nicht mit 0en vorangestellt.

Der beste Weg, alle Nuancen zu erkennen, 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;

was zu einer Ausgabe führt:

+----+-------+-------+------------+-------+
| id | int1  | int2  | zf1        | zf2   |
+----+-------+-------+------------+-------+
|  1 | 10000 | 10000 | 0000010000 | 10000 |
|  2 |   100 |   100 | 0000000100 |   100 |
+----+-------+-------+------------+-------+

Diese Antwort wurde mit MySQL 5.7.12 für Linux getestet und kann sich bei anderen Implementierungen unterscheiden oder auch nicht.

5 Stimmen

"Beachten Sie, dass die Spalte 'int1' eine viel geringere Anzeigebreite hat als die Spalte 'zerofill2', obwohl die Länge größer ist" ... Das liegt nur daran, dass der Spaltenname "zerofill2" 9 Zeichen lang ist, während "int1" nur 4 Zeichen lang ist.

2 Stimmen

... ja, also hat die Länge eindeutig keine Auswirkung, auch nicht auf die Anzeigebreite, wenn die Nullfüllung nicht aktiviert ist. Andernfalls wäre int1 mit einer Breite von 10 Zeichen viel breiter.

2 Stimmen

Eine gute Erklärung mit einem soliden Beispiel. Viel besser als die akzeptierte Antwort. Vielen Dank @Programster.

36voto

ks1322 Punkte 31216

Was ist die Größe der Spalte int(11) in mysql in Bytes?

(11) - dieses Attribut von int Der Datentyp hat nichts mit der Größe der Spalte zu tun. Es handelt sich lediglich um die Anzeigebreite des Ganzzahl-Datentyps. Aus 11.1.4.5. Attribute des numerischen Typs :

MySQL unterstützt eine Erweiterung für die optionale Angabe der Anzeige Breite von Integer-Datentypen in Klammern nach dem Basisschlüsselwort für den Typ. INT(4) spezifiziert zum Beispiel eine INT mit einer Anzeigebreite Breite von vier Ziffern.

0 Stimmen

Beachten Sie auch, dass die Eigenschaft width seit Version 8.0.17 veraltet ist. dev.mysql.com/doc/refman/8.0/de/numeric-type-attributes.html

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X