359 Stimmen

Was ist die maximale Größe von MySQL VARCHAR?

Ich würde gerne wissen, was die maximale Größe für einen MySQL VARCHAR-Typ ist.

Ich habe gelesen, dass die maximale Größe durch die Zeilengröße begrenzt ist, die etwa 65k beträgt. Ich habe versucht, das Feld auf varchar(20000) aber er sagt, dass das zu groß ist.

Ich könnte es einstellen auf varchar(10000) . Wie hoch ist der genaue Höchstwert, auf den ich ihn einstellen kann?

350voto

rajukoyilandy Punkte 5151

Beachten Sie, dass MySQL eine maximale Zeilengröße hat

Die interne Darstellung einer MySQL-Tabelle hat eine maximale Zeilengröße von 65.535 Bytes, wobei BLOB- und TEXT-Typen nicht mitgezählt werden. BLOB- und TEXT-Spalten tragen nur 9 bis 12 Bytes zur Begrenzung der Zeilengröße bei, da ihr Inhalt getrennt vom Rest der Zeile gespeichert wird. Lesen Sie mehr über Begrenzung der Anzahl der Tabellenspalten und der Zeilengröße.

Die maximale Größe, die eine einzelne Spalte einnehmen kann, ist vor und nach MySQL 5.0.3 unterschiedlich

Werte in VARCHAR-Spalten sind Strings mit variabler Länge. Die Länge kann als Wert von 0 bis 255 vor MySQL 5.0.3 und 0 bis 65,535 in 5.0.3 und späteren Versionen. Die effektive Maximallänge eines VARCHAR in MySQL 5.0.3 und höher ist abhängig von der maximalen Zeilengröße (65.535 Byte, die von allen Spalten gemeinsam genutzt wird) und dem verwendeten Zeichensatz.

Beachten Sie jedoch, dass die Grenze niedriger ist, wenn Sie einen Multi-Byte-Zeichensatz wie utf8 oder utf8mb4 verwenden.

U TEXT Typen, um die Begrenzung der Zeilengröße zu überwinden.

Die vier TEXT-Typen sind TINYTEXT, TEXT, MEDIUMTEXT und LONGTEXT. Sie entsprechen den vier BLOB-Typen und haben die gleichen maximalen Längen und Speicheranforderungen.

Weitere Einzelheiten zu den Typen BLOB und TEXT

Noch mehr

Weitere Einzelheiten finden Sie unter Datentyp Speicheranforderungen die sich mit den Speicheranforderungen für alle Datentypen befasst.

70voto

paxdiablo Punkte 809679

Gemäß die Online-Dokumente gibt es eine Zeilenbegrenzung von 64K, und Sie können die Zeilengröße mit Hilfe von berechnen:

row length = 1
             + (sum of column lengths)
             + (number of NULL columns + delete_flag + 7)/8
             + (number of variable-length columns)

Sie müssen bedenken, dass die Spaltenlängen nicht eins-zu-eins auf ihre Größe abgebildet werden. Zum Beispiel, CHAR(10) CHARACTER SET utf8 benötigt drei Bytes für jedes der zehn Zeichen, da diese spezielle Kodierung die Eigenschaft von drei Bytes pro Zeichen berücksichtigen muss utf8 (das ist MySQLs utf8 Kodierung und nicht das "echte" UTF-8, das bis zu vier Bytes haben kann).

Aber wenn Ihre Zeilengröße sich 64K nähert, sollten Sie vielleicht das Schema Ihrer Datenbank überprüfen. Es ist eine seltene Tabelle, die in einer richtig eingerichteten (3NF) Datenbank so breit sein muss - es ist möglich, nur nicht sehr häufig.

Wenn Sie mehr als das verwenden möchten, können Sie die BLOB o TEXT Typen. Diese werden nicht auf die 64K-Grenze der Zeile angerechnet (abgesehen von einem kleinen administrativen Fußabdruck), aber Sie müssen sich anderer Probleme bewusst sein, die sich aus ihrer Verwendung ergeben, wie z.B. die Tatsache, dass ab einer bestimmten Anzahl von Zeichen nicht mehr nach dem gesamten Textblock sortiert werden kann (obwohl dies nach oben konfiguriert werden kann), dass temporäre Tabellen auf der Festplatte statt im Speicher liegen müssen oder dass Client- und Server-Kommunikationspuffer so konfiguriert werden müssen, dass sie die Größen effizient handhaben können.

Die zulässigen Größen sind:

TINYTEXT          255 (+1 byte  overhead)
TEXT          64K - 1 (+2 bytes overhead)
MEDIUMTEXT    16M - 1 (+3 bytes overhead)
LONGTEXT      4G  - 1 (+4 bytes overhead)

Sie haben immer noch die Byte/Zeichen-Fehlanpassung (so dass ein MEDIUMTEXT utf8 Spalte kann "nur" etwa eine halbe Million Zeichen speichern, (16M-1)/3 = 5,592,405 ), aber es vergrößert dennoch Ihre Reichweite erheblich.

46voto

Attila Punkte 2783

Quelle

Die maximale Länge eines varchar ist abhängig von der maximalen Zeilengröße in MySQL, die 64KB beträgt (BLOBs nicht mitgezählt):

VARCHAR(65535) Beachten Sie jedoch, dass die Grenze niedriger ist, wenn Sie einen Multi-Byte-Zeichensatz verwenden:

VARCHAR(21844) CHARACTER SET utf8

36voto

Firze Punkte 3511

Aus der MySQL-Dokumentation:

Die effektive Maximallänge eines VARCHAR in MySQL 5.0.3 und höher ist ist abhängig von der maximalen Zeilengröße (65.535 Bytes, die von allen alle Spalten geteilt wird) und dem verwendeten Zeichensatz. Zum Beispiel können utf8-Zeichen können bis zu drei Bytes pro Zeichen benötigen, so dass eine VARCHAR-Spalte, die den utf8-Zeichensatz verwendet, als maximal 21.844 Byte groß deklariert werden kann. Zeichen sein.

Die Grenzwerte für VARCHAR variieren je nach verwendetem Zeichensatz. Bei Verwendung von ASCII würde 1 Byte pro Zeichen verwendet. Das bedeutet, dass Sie 65.535 Zeichen speichern könnten. Bei Verwendung von utf8 werden 3 Byte pro Zeichen verwendet, was zu einer Zeichenbegrenzung von 21.844 führt. ABER wenn Sie den modernen Multibyte-Zeichensatz utf8mb4 verwenden, sollten Sie das tun! Er unterstützt Emojis und andere Sonderzeichen. Es werden 4 Bytes pro Zeichen verwendet. Dadurch wird die Anzahl der Zeichen pro Tabelle auf 16.383 begrenzt. Beachten Sie, dass andere Felder wie INT ebenfalls zu diesen Grenzen gezählt werden.

Schlussfolgerung:

utf8 Maximum von 21,844 Zeichen

utf8mb4 Maximum von 16,383 Zeichen

7voto

SRIRAM Punkte 1888

Sie können auch MEDIUMBLOB/LONGBLOB oder MEDIUMTEXT/LONGTEXT verwenden.

Ein BLOB-Typ in MySQL kann bis zu 65.534 Bytes speichern. Wenn Sie versuchen, mehr als diese Menge an Daten zu speichern, schneidet MySQL die Daten ab. MEDIUMBLOB kann bis zu 16.777.213 Bytes speichern, und LONGBLOB kann bis zu 4.294.967.292 Bytes speichern.

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