Ich würde gerne wissen, wie groß 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 ungefähr 65 KB beträgt. Ich habe versucht, das Feld auf einzustellen, varchar(20000)
aber es sagt, dass das zu groß ist.
Ich könnte es einstellen varchar(10000)
. Was ist das genaue Maximum, auf das ich es einstellen kann?
Antworten:
Beachten Sie, dass MySQL eine maximale Zeilengröße hat
Die maximale Größe, die eine einzelne Spalte einnehmen kann, unterscheidet sich vor und nach MySQL 5.0.3
Beachten Sie jedoch, dass das Limit niedriger ist, wenn Sie einen Mehrbyte-Zeichensatz wie utf8 oder utf8mb4 verwenden.
Verwenden Sie
TEXT
inorder, um die Zeilengrößenbeschränkung zu überwinden.Weitere Details zu BLOB- und TEXT-Typen
Sogar mehr
Kasse mehr Details zu Datentyp - Speicheranforderungen , die sie mit dem Speicherbedarf für alle Datentypen.
quelle
Gemäß den Online-Dokumenten gibt es eine Zeilenbeschränkung von 64 KB, und Sie können die Zeilengröße mithilfe von Folgendem ermitteln:
Sie müssen berücksichtigen, dass die Spaltenlängen keine Eins-zu-Eins-Zuordnung ihrer Größe sind. Benötigt beispielsweise
CHAR(10) CHARACTER SET utf8
drei Bytes für jedes der zehn Zeichen, da diese bestimmte Codierung die Eigenschaft von drei Bytes pro Zeichen berücksichtigen mussutf8
(dies ist die MySQL-utf8
Codierung anstelle von "echtem" UTF-8, das bis zu vier Bytes enthalten kann ).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, aber nicht sehr häufig.
Wenn Sie mehr als das verwenden möchten, können Sie die Typen
BLOB
oderTEXT
verwenden. Diese werden nicht auf das 64-KB-Limit der Zeile angerechnet (abgesehen von einem geringen administrativen Platzbedarf). Sie müssen sich jedoch anderer Probleme bewusst sein, die sich aus ihrer Verwendung ergeben, z. B., dass Sie nicht über eine bestimmte Anzahl hinaus mit dem gesamten Textblock sortieren können Anzahl von Zeichen (obwohl dies nach oben 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 zulässigen Größen sind:
Sie haben immer noch die Nichtübereinstimmung von Byte und Zeichen (so dass eine
MEDIUMTEXT utf8
Spalte "nur" etwa eine halbe Million Zeichen speichern kann(16M-1)/3 = 5,592,405
), aber es erweitert Ihren Bereich immer noch erheblich.quelle
utf8mb4
in MySQL immer auf setzen .utf8mb4
ist der Name von MySql für das, was der Rest des Wortes utf8 nennt.Quelle
quelle
CHARACTER SET utf8
Beispiele zu verwenden. Es sollte seinCHARACTER SET utf8mb4
(wenn Sie möchten, dass der gesamte Unicode-Text ordnungsgemäß gespeichert wird ... und wer möchte das nicht?)CHARSET=utf8mb4
VerwendungVARCHAR(16383)
.Aus der MySQL-Dokumentation:
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 Zeichenbegrenzung 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 auch andere Felder wie INT bis zu diesen Grenzwerten gezählt werden.
Fazit:
utf8 maximal 21.844 Zeichen
utf8mb4 maximal 16.383 Zeichen
quelle
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 so viele Daten zu speichern, dass MySQL die Daten abschneidet. MEDIUMBLOB kann bis zu 16.777.213 Bytes speichern, und LONGBLOB kann bis zu 4.294.967.292 Bytes speichern.
quelle
Vor MySQL Version 5.0.3 kann der Varchar-Datentyp 255 Zeichen speichern, ab 5.0.3 jedoch 65.535 Zeichen.
ABER es gibt eine Begrenzung der maximalen Zeilengröße von 65.535 Bytes. Dies bedeutet, dass alle Spalten nicht mehr als 65.535 Byte enthalten dürfen.
In Ihrem Fall ist es möglich, dass beim Versuch, mehr als 10000 festzulegen, mehr als 65.535 überschritten 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/Hli6G3
quelle
Sie können den
TEXT
Typ verwenden , der nicht auf 64 KB beschränkt ist.quelle