Per die MySQL-Dokumente gibt es vier TEXT-Typen:
Welche maximale Länge kann ich in einer Spalte jedes Datentyps speichern, vorausgesetzt, die Zeichenkodierung ist UTF-8?
Aus der Dokumentation :
Typ | Maximale Länge ----------- + --------------------------- ------ TINYTEXT | 255 (2 8−1) Bytes TEXT | 65,535 (216−1) Bytes = 64 KiB MEDIUMTEXT | 16.777.215 (224−1) Bytes = 16 MiB LONGTEXT | 4,294,967,295 (232−1) Bytes = 4 GiB
Beachten Sie, dass die Anzahl der Zeichen , die in Ihrer Spalte gespeichert werden können, von der Zeichencodierung abhängt.
Erweiterung der gleichen Antwort
DIESES IS EINE ROHE SCHÄTZUNGSTABELLE FÜR SCHNELLE ENTSCHEIDUNGEN!
x-x
Type | A= worst case (x/3) | B = best case (x) | words estimate (A/4.5) - (B/4.5)
-----------+---------------------------------------------------------------------------
TINYTEXT | 85 | 255 | 18 - 56
TEXT | 21,845 | 65,535 | 4,854.44 - 14,563.33
MEDIUMTEXT | 5,592,415 | 16,777,215 | 1,242,758.8 - 3,728,270
LONGTEXT | 1,431,655,765 | 4,294,967,295 | 318,145,725.5 - 954,437,176.6
Bitte lesen Sie auch die Antwort von Chris V: https://stackoverflow.com/a/35785869/1881812
In Anbetracht der Herausforderung von @ Ankan-Zerob ist dies meine Schätzung der maximalen Länge, die in jedem Texttyp gespeichert werden kann, gemessen in Worten :
Type | Bytes | English words | Multi-byte words
-----------+---------------+---------------+-----------------
TINYTEXT | 255 | ±44 | ±23
TEXT | 65,535 | ±11,000 | ±5,900
MEDIUMTEXT | 16,777,215 | ±2,800,000 | ±1,500,000
LONGTEXT | 4,294,967,295 | ±740,000,000 | ±380,000,000
In Englisch sind 4,8 Buchstaben pro Wort wahrscheinlich ein guter Durchschnitt (z. B. norvig.com/mayzner.html ), obwohl Word Die Längen variieren je nach Fachgebiet (z. B. gesprochene Sprache im Vergleich zu akademischen Arbeiten). Es macht also keinen Sinn, zu genau zu sein. Englisch besteht hauptsächlich aus Einzelbyte-Zeichen ASCII, mit gelegentlichen Mehrbyte-Zeichen, die einem Byte pro Buchstabe sehr nahe kommen. Für Leerzeichen zwischen Wörtern muss ein zusätzliches Zeichen zulässig sein, daher habe ich von 5,8 Bytes pro Wort abgerundet. Sprachen mit vielen Akzenten wie Polnisch würden etwas weniger Wörter speichern, wie dies z. Deutsch mit längeren Wörtern.
Sprachen, die Mehrbyte-Zeichen wie Griechisch, Arabisch, Hebräisch, Hindi, Thailändisch usw. erfordern, erfordern in UTF-8 in der Regel zwei Byte pro Zeichen. Bei 5 Buchstaben pro Wort habe ich wild gerundet von 11 Bytes pro Wort.
CJK-Skripte (Hanzi, Kanji, Hiragana, Katakana usw.), von denen ich nichts weiß; Ich glaube, dass Zeichen in UTF-8 meistens 3 Bytes benötigen, und (mit massiver Vereinfachung), dass sie ungefähr 2 Zeichen pro Wort verwenden, sodass sie irgendwo zwischen den anderen beiden liegen. (Abhängig von CJK-Skripten ist mit UTF-16 wahrscheinlich weniger Speicherplatz erforderlich.).
Dies ignoriert natürlich den Speicheraufwand usw.
Das ist Nizza, beantwortet aber nicht die Frage:
"Ein VARCHAR sollte immer anstelle von TINYTEXT verwendet werden." Tinytext ist nützlich, wenn Sie breite Zeilen haben, da die Daten außerhalb des Datensatzes gespeichert werden. Es gibt einen Performance-Overhead, der jedoch einen Nutzen hat.