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

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 von etwa 65k begrenzt ist. Ich habe versucht, das Feld auf varchar(20000) aber es sagt, dass das zu groß ist.

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

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

Die interne Darstellung einer MySQL-Tabelle hat eine maximale Zeilengröße von 65.535 Bytes, BLOB- und TEXT-Typen sind nicht berücksichtigt. BLOB- und TEXT-Spalten tragen nur 9 bis 12 Byte zur Zeilengrößenbegrenzung bei, da ihre Inhalte getrennt vom Rest der Zeile gespeichert werden. Weitere Informationen zu den Beschränkungen für die Tabellenspaltenanzahl und die Zeilengröße

Die maximale Größe, die eine einzelne Spalte belegen kann, unterscheidet sich vor und nach MySQL 5.0.3

Werte in VARCHAR-Spalten sind Zeichenfolgen variabler Länge. Die Länge kann als ein Wert von 0 bis 255 vor MySQL 5.0.3 und von 0 bis 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 Multi-Byte-Zeichensatz wie utf8 oder utf8mb4 verwenden.

Verwenden Sie TEXT Typen, um das Zeilengrößenlimit 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

Sogar mehr

Überprüfen Sie weitere Details zu Datentypspeicheranforderungen, die sich mit Speicheranforderungen für alle Datentypen befassen.

Laut den Online-Dokumenten gibt es ein Zeilenlimit von 64 KB und Sie können die Zeilengröße mit folgenden Methoden ermitteln:

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

Sie müssen daran denken, dass die Spaltenlängen keine Eins-zu-eins-Abbildung 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 Eigenschaft von utf8 drei Bytes pro Zeichen berücksichtigen muss (das ist die utf8 Codierung von MySQL und nicht “echtes” UTF-Zeichen). 8, die bis zu vier Bytes haben kann).

Wenn Ihre Zeilengröße jedoch 64 KB erreicht, sollten Sie das Schema Ihrer database untersuchen. Es ist eine seltene Tabelle, die in einer richtig eingerichteten (3NF) database so weit sein muss – es ist möglich, nur nicht sehr häufig.

Wenn Sie mehr als das verwenden möchten, können Sie die BLOB oder TEXT Typen verwenden. Diese zählen nicht gegen die 64 KB-Grenze der Zeile (abgesehen von einer kleinen Verwaltungsfläche), aber Sie müssen sich anderer Probleme bewusst sein, die sich aus ihrer Verwendung ergeben, z. B. nicht in der Lage sein, den gesamten Textblock über eine bestimmte Anzahl hinaus zu sortieren (Dies kann nach oben konfiguriert werden.) Erzwingt, dass temporäre Tabellen auf der Festplatte und nicht im Speicher abgelegt werden, oder dass Client- und Server-Kommunikationspuffer so konfiguriert werden müssen, dass die Größen effizient gehandhabt werden 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 das Byte / Zeichen-Missverhältnis (so dass eine MEDIUMTEXT utf8 Spalte “nur” ungefähr eine halbe Million Zeichen speichern kann, (16M-1)/3 = 5,592,405 ), aber es erweitert Ihren Bereich immer noch erheblich.

Quelle

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

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

VARCHAR (21844) CHARAKTERSATZ utf8

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. Zum Beispiel können utf8-Zeichen bis zu drei Bytes pro Zeichen benötigen, sodass eine VARCHAR-Spalte, die den utf8-Zeichensatz verwendet, maximal 21.844 Zeichen umfassen kann.

Die Grenzwerte für VARCHAR variieren abhängig vom verwendeten Zeichensatz. Bei Verwendung von ASCII würde 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 einem Zeichenlimit 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 wird 4 Bytes pro Zeichen verwenden. Dies begrenzt die Anzahl der Zeichen pro Tabelle auf 16.383. Beachten Sie, dass auch andere Felder wie INT zu diesen Grenzwerten gezählt werden.

Fazit:

utf8 maximal 21.844 Zeichen

utf8mb4 maximal 16.383 Zeichen

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 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.

Vor MySQL Version 5.0.3 Varchar Datentyp kann 255 Zeichen speichern, aber ab 5.0.3 kann 65.535 Zeichen gespeichert werden.

ABER es hat eine Begrenzung der maximalen Zeilengröße von 65.535 Bytes. Das bedeutet, dass alle Spalten nicht mehr als 65.535 Bytes umfassen dürfen.

In Ihrem Fall ist es möglich, dass, wenn Sie versuchen, mehr als 10000 zu setzen, es mehr als 65.535 überschreitet und mysql den Fehler gibt.

Weitere Informationen finden Sie unter https://dev.mysql.com/doc/refman/5.0/de/column-count-limit.html

Blog mit Beispiel: http://goo.gl/Hli6G3

Die maximale VARCHAR-Größe von MySQL beträgt 65.535 Byte. Es kann 65.535 Zeichen speichern.

Sie können den TEXT Typ verwenden , der nicht auf 64 KB beschränkt ist.