Gemäß den Online-Dokumenten gibt es eine Zeilenbeschränkung von 64 KB, und Sie können die Zeilengröße mithilfe von Folgendem ermitteln:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
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 muss utf8
(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
oder TEXT
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:
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 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.