it-swarm.com.de

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

Ich würde gerne wissen, wie groß ein MySQL VARCHAR-Typ maximal ist.

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

Ich könnte es auf varchar(10000) setzen. Was ist das genaue Maximum, auf das ich es einstellen kann?

276
user1832628

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 die BLOB- und TEXT-Typen nicht berücksichtigt werden. BLOB- und TEXT-Spalten tragen nur 9 bis 12 Byte zur Zeilengrößenbeschränkung bei, da ihr Inhalt vom Rest der Zeile getrennt gespeichert wird. Lesen Sie mehr über Grenzen für die Anzahl der Tabellenspalten und die 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 Zeichenfolgen variabler Länge. Die Länge kann als Wert zwischen 0 und 255 vor MySQL 5.0.3 und zwischen 0 und 65.535 in 5.0.3 und höheren Versionen angegeben werden. Die effektive maximale Länge eines VARCHAR in MySQL 5.0.3 und höher hängt von der maximalen Zeilengröße (65.535 Byte, die von allen Spalten gemeinsam genutzt wird) und dem verwendeten Zeichensatz ab.

Beachten Sie jedoch, dass das Limit niedriger ist, wenn Sie einen Multibyte-Zeichensatz wie utf8 oder utf8mb4 verwenden.

Verwenden Sie TEXT -Typen, um die Begrenzung der Zeilengröße zu überwinden.

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

Weitere Details zu BLOB- und TEXT-Typen

Noch mehr

Weitere Informationen finden Sie unter Datentyp-Speicheranforderungen , in dem die Speicheranforderungen für alle Datentypen behandelt werden.

273
rajukoyilandy

Gemäß den Online-Dokumenten gibt es ein Zeilenlimit von 64 KB und Sie können die Zeilengröße folgendermaßen berechnen:

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

Beachten Sie, dass die Spaltenlängen keine Eins-zu-Eins-Zuordnung ihrer Größe sind. Zum Beispiel benötigt CHAR(10) CHARACTER SET utf8 drei Bytes für jedes der zehn Zeichen, da diese spezielle Codierung die Drei-Byte-pro-Zeichen-Eigenschaft von utf8 berücksichtigen muss (das ist MySQLs utf8 encoding anstelle von "echtem" UTF-8 (bis zu vier Bytes).

Wenn sich Ihre Zeilengröße jedoch 64 KB nähert, möchten Sie möglicherweise das Schema Ihrer Datenbank untersuchen. Es ist eine seltene Tabelle, die in einer ordnungsgemäß 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 Typen BLOB oder TEXT verwenden. Diese zählen nicht zum 64-KB-Limit der Zeile (mit Ausnahme eines geringen administrativen Aufwands). Sie müssen sich jedoch anderer Probleme bewusst sein, die sich aus ihrer Verwendung ergeben, z von Zeichen (obwohl dies aufwärts konfiguriert werden kann), wodurch temporäre Tabellen gezwungen werden, sich auf der Festplatte und nicht im Speicher zu befinden, oder Client- und Server-Kommunikationspuffer konfiguriert werden müssen, um die Größen effizient zu handhaben.

Die erlaubten 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 Nichtübereinstimmung zwischen Byte und Zeichen (sodass in einer MEDIUMTEXT utf8 -Spalte "nur" etwa eine halbe Million Zeichen gespeichert werden können, (16M-1)/3 = 5,592,405), aber Ihr Bereich wird dadurch immer noch erheblich erweitert.

56
paxdiablo

Quelle

Die maximale Länge eines Varchars hängt von der maximalen Zeilengröße in MySQL ab, die 64 KB beträgt (ohne BLOBs):

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

VARCHAR (21844) CHARACTER SET utf8

36
Attila

Aus der MySQL-Dokumentation:

Die effektive maximale Länge eines VARCHAR in MySQL 5.0.3 und höher hängt von der maximalen Zeilengröße (65.535 Byte, die von allen Spalten gemeinsam genutzt wird) und dem verwendeten Zeichensatz ab. Beispielsweise können für utf8-Zeichen bis zu drei Bytes pro Zeichen erforderlich sein, sodass für eine VARCHAR-Spalte, die den Zeichensatz utf8 verwendet, ein Maximum von 21.844 Zeichen angegeben werden kann.

Die Grenzwerte für VARCHAR variieren je nach verwendetem Zeichensatz. Bei Verwendung von ASCII wird 1 Byte pro Zeichen verwendet. Das heißt, Sie könnten 65.535 Zeichen speichern. Bei Verwendung von utf8 werden 3 Bytes pro Zeichen verwendet, was zu einer Zeichenbeschränkung von 21.844 führt. ABER wenn Sie den modernen Multibyte-Zeichensatz utf8mb4 verwenden, den Sie verwenden sollten! Es 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 Grenzwerten gezählt werden.

Fazit:

tf8 maximal 21.844 Zeichen

tf8mb4 maximal 16.38 Zeichen

14
Firze

sie können auch MEDIUMBLOB/LONGBLOB oder MEDIUMTEXT/LONGTEXT verwenden

Ein BLOB-Typ in MySQL kann bis zu 65.534 Byte speichern, wenn Sie versuchen, mehr als diese Datenmenge zu speichern. MySQL schneidet die Daten ab. MEDIUMBLOB kann bis zu 16.777.213 Byte und LONGBLOB bis zu 4.294.967.292 Byte speichern.

6
SRIRAM

Vor Mysql Version 5.0.3 kann der Varchar-Datentyp 255 Zeichen speichern, ab 5.0.3 können jedoch 65.535 Zeichen gespeichert werden.

ABER es gibt eine Beschränkung der maximalen Zeilengröße von 65.535 Bytes. Dies bedeutet, dass einschließlich aller Spalten nicht mehr als 65.535 Byte vorhanden sein dürfen.

In Ihrem Fall ist es möglich, dass wenn Sie versuchen, mehr als 10000 einzustellen, mehr als 65.535 eingestellt werden und mysql den Fehler ausgibt.

Weitere Informationen: https://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html

blog mit Beispiel: http://goo.gl/Hli6G

3
Suresh Kamrushi