Auf den ersten Blick sieht es so aus, als könnten TEXT und VARCHAR dieselben Informationen speichern. Es gibt jedoch grundlegende Unterschiede zwischen der Funktionsweise von TEXT-Feldern und VARCHAR-Feldern, die berücksichtigt werden müssen.
Standard VARCHAR ist tatsächlich Teil des ISO SQL: 2003-Standards. Die TEXT-Datentypen, einschließlich TINYTEXT, sind nicht Standard.
Speicher TEXT-Datentypen werden als separate Objekte von den Tabellen und Ergebnismengen gespeichert, die sie enthalten. Dieser Speicher ist transparent - es gibt keinen Unterschied darin, wie eine Abfrage mit einem TEXT-Feld geschrieben wird, im Vergleich zu einer Abfrage mit einem VARCHAR-Feld. Da TEXT nicht als Teil einer Zeile gespeichert wird, erfordert das Abrufen von TEXT-Feldern zusätzlichen [bearbeiteten 1/22] Speicheraufwand.
Maximale VARCHAR-Länge Die maximale Zeilenlänge eines VARCHAR wird durch die maximale Zeilenlänge einer Tabelle begrenzt. Dies sind 65.535 Bytes für die meisten Speicher-Engines (NDB hat einen anderen maximalen Zeilenwert). Theoretisch beträgt die maximale Länge eines VARCHAR 65.536 Bytes. Der Overhead begrenzt die tatsächliche maximale Größe eines VARCHAR weiter.
Das Speichern der Länge eines VARCHAR-Felds dauert 1 Byte, wenn das VARCHAR-Feld eine maximale Länge von 0 bis 255 Byte hat. Wenn es größer als 255 Bytes ist, beträgt der Overhead zum Speichern der Länge 2 Bytes. Wenn das Feld VARCHAR NULL-Werte zulässt, wird zusätzlicher Overhead hinzugefügt. Jede Tabelle verwendet 1 Byte Overhead für jeden Satz von 8 Feldern, die NULL-Werte zulassen. Wenn VARCHAR die einzige Zeile in der Tabelle ist und keine NULL-Werte zulässt, beträgt die maximal zulässige Länge für VARCHAR 65.532 Byte.
Beachten Sie, dass die Zahl in VARCHAR (x) die Anzahl der Zeichen und nicht die Anzahl der Bytes darstellt. Daher kann es schwierig sein, eine Tabelle nur mit VARCHAR (65532) zu definieren, wenn der Zeichensatz Mehrbytezeichen wie UTF-8 verwendet.
Wenn Sie versuchen, einen VARCHAR-Wert zu definieren, der länger als zulässig ist, wird ein Fehler wie 1118 oder 1074 angezeigt:
ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs.
ERROR 1074 (42000): Column length too big for column 'col_name' (max=[max number here]); use BLOB or TEXT instead
Maximale TEXT-Länge Die maximale Größe eines TEXT-Datentyps hängt davon ab, welcher Typ des TEXT-Datentyps verwendet wird. Da sie als Objekte gespeichert sind, ist der einzige Zeilenaufwand im Tabellenobjekt ein Zeiger (8 oder 16 Byte). Hier ist eine Liste der maximalen TEXT-Länge und des Overheads (im TEXT-Objekt):
TINYTEXT – up to 255 bytes, 1 byte overhead
TEXT – up to 64 Kb, 2 bytes overhead
MEDIUMTEXT – up to 16 Mb, 3 bytes overhead
LONGTEXT – up to 4 Gb, 4 bytes overhead
STANDARD-Werte In MySQL dürfen TEXT-Datentypen keinen anderen Standardwert als NULL haben. VARCHAR-Felder dürfen mit einem DEFAULT-Wert erstellt werden.
Schlussfolgerungen Aufgrund der Auswirkungen auf den Speicher ist es vorzuziehen, VARCHAR anstelle von TINYTEXT zu verwenden.
Wenn Sie einen DEFAULT-Wert benötigen, der nicht NULL ist, müssen Sie VARCHAR (oder CHAR) verwenden.
Wenn Sie Zeichenfolgen länger als ca. 64 KB speichern müssen, verwenden Sie MEDIUMTEXT oder LONGTEXT. VARCHAR kann das Speichern so großer Werte nicht unterstützen.
Stellen Sie sicher, dass Sie die Auswirkungen eines Mehrbyte-Zeichensatzes kennen. VARCHAR (255) speichert 255 Zeichen, die mehr als 255 Byte umfassen können.
In diesem Fall
varchar
ist besser.Beachten Sie,
varchar
dass zwischen 1 und 65535 Zeichen liegen können.Blobs werden in einem separaten Abschnitt der Datei gespeichert.
Sie benötigen ein zusätzliches Fileread, um in die Daten aufgenommen zu werden.
Aus diesem Grund wird Varchar viel schneller abgerufen.
Wenn Sie einen großen Blob haben, auf den Sie selten zugreifen, ist ein Blob sinnvoller.
Durch das Speichern der Blob-Daten in einer separaten (Teil der) Datei kann Ihre Kerndatendatei kleiner werden und somit schneller abgerufen werden.
quelle