Gemäß den MySQL-Dokumenten gibt es vier TEXT-Typen:
- TINYTEXT
- TEXT
- MEDIUMTEXT
- LONGTEXT
Was ist die maximale Länge, die ich in einer Spalte jedes Datentyps speichern kann, vorausgesetzt, die Zeichenkodierung ist UTF-8?
Gemäß den MySQL-Dokumenten gibt es vier TEXT-Typen:
Was ist die maximale Länge, die ich in einer Spalte jedes Datentyps speichern kann, vorausgesetzt, die Zeichenkodierung ist UTF-8?
Antworten:
Aus der Dokumentation :
Geben Sie | ein Maximale Länge ----------- + --------------------------------- TINYTEXT | 255 (2 8 −1) Bytes TEXT | 65.535 (2 16 - 1) Bytes = 64 KiB MEDIUMTEXT | 16.777.215 (2 24 −1) Bytes = 16 MiB LONGTEXT | 4,294,967,295 (2 32 -1) Bytes = 4 GiB
Beachten Sie, dass die Anzahl der Zeichen , die in Ihrer Spalte gespeichert werden können, von der Zeichencodierung abhängt .
A TEXT column with a maximum length of 255 (28 – 1) characters. The effective maximum length is less if the value contains multi-byte characters.
Weitere Informationen finden Sie in Ankans Antwort.
Erweiterung der gleichen Antwort
Dies ist eine grobe Schätzungstabelle für schnelle Entscheidungen!
xx
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
TINYTEXT
zählt 1 Byte + 8 Byte gegen die Datensatzgröße, während A VARCHAR(255)
von 1 Byte + 255 Byte bis zu 2 Byte + 1020 Byte (4 Byte UTF-8-Zeichen) gegen die Datensatzgröße zählt.
Angesichts 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
Im Englischen sind 4,8 Buchstaben pro Wort wahrscheinlich ein guter Durchschnitt (z. B. norvig.com/mayzner.html) ), obwohl die Wortlängen je nach Domäne variieren (z. B. gesprochene Sprache im Vergleich zu wissenschaftlichen Arbeiten), sodass es keinen Sinn macht, zu genau zu sein. Englisch besteht hauptsächlich aus Einzelbyte-ASCII-Zeichen mit sehr gelegentlichen Mehrbyte-Zeichen, so nahe an einem Byte pro Buchstabe. Für Leerzeichen zwischen Wörtern muss ein zusätzliches Zeichen zugelassen werden, daher habe ich von 5,8 Byte pro Wort abgerundet. Sprachen mit vielen Akzenten wie Polnisch würden etwas weniger Wörter speichern, ebenso wie Deutsch mit längeren Wörtern.
Sprachen, die Multi-Byte erfordern wie Griechisch, Arabisch, Hebräisch, Hindi, Thailändisch usw. usw. erfordern, erfordern in UTF-8 normalerweise zwei Bytes pro Zeichen. Ich schätze wild mit 5 Buchstaben pro Wort und habe von 11 Bytes pro Wort abgerundet.
CJK-Skripte (Hanzi, Kanji, Hiragana, Katakana usw.) Ich weiß nichts davon; Ich glaube, dass Zeichen in UTF-8 meistens 3 Bytes benötigen, und (mit massiver Vereinfachung) sie könnten ungefähr 2 Zeichen pro Wort verwenden, so dass sie irgendwo zwischen den beiden anderen liegen würden. (CJK-Skripte benötigen mit UTF-16 wahrscheinlich weniger Speicherplatz, je nachdem).
Dies ignoriert natürlich den Speicheraufwand usw.