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.