it-swarm.com.de

Unterschied zwischen VARCHAR und TEXT in MySQL

Wenn wir in mysql eine Tabelle mit einer VARCHAR -Spalte erstellen, müssen wir die Länge dafür festlegen. Für den Typ TEXT muss die Länge nicht angegeben werden.

Was sind die Unterschiede zwischen VARCHAR und TEXT?

243
user3840485

TL; DR

TEXT

  • feste maximale Größe von 65535 Zeichen (Sie können die maximale Größe nicht begrenzen)
  • benötigt 2 + c Bytes Festplattenspeicher, wobei c die Länge der gespeicherten Zeichenfolge ist.
  • kann nicht Teil eines Index sein

VARCHAR(M)

  • variable maximale Größe von M Zeichen
  • M muss zwischen 1 und 65535 liegen
  • benötigt 1 + c Byte (für M ≤ 255) oder 2 + c (für 256 ≤ M ≤ 65535) Byte Festplattenspeicher, wobei c die Länge der gespeicherten Zeichenfolge ist
  • kann Teil eines Index sein

Mehr Details

TEXT hat eine feste maximale Größe von _2¹⁶-1 = 65535_ Zeichen.
VARCHAR hat eine Variable maximale Größe M bis _M = 2¹⁶-1_.
Sie können also nicht die Größe von TEXT wählen, aber Sie können für VARCHAR.

Der andere Unterschied besteht darin, dass Sie keinen Index (mit Ausnahme eines Volltextindex) in eine TEXT-Spalte einfügen können.
Wenn Sie also einen Index für die Spalte haben möchten, müssen Sie VARCHAR verwenden. Beachten Sie jedoch, dass die Länge eines Indexes ebenfalls begrenzt ist. Wenn Ihre Spalte VARCHAR zu lang ist, müssen Sie nur die ersten Zeichen der Spalte VARCHAR in Ihrem Index verwenden (siehe Dokumentation zu _CREATE INDEX_). ).

Sie möchten aber auch VARCHAR verwenden, wenn Sie wissen, dass die maximale Länge der möglichen Eingabezeichenfolge nur M beträgt, z. eine Telefonnummer oder einen Namen oder so ähnlich. Dann können Sie VARCHAR(30) anstelle von TINYTEXT oder TEXT verwenden. Wenn jemand versucht, den Text aller drei "Herr des Rings" -Bücher in Ihrer Telefonnummernspalte zu speichern, werden nur die ersten 30 Zeichen gespeichert :)

Bearbeiten: Wenn der Text, den Sie in der Datenbank speichern möchten, länger als 65535 Zeichen ist, müssen Sie MEDIUMTEXT oder LONGTEXT auswählen, aber seien Sie vorsichtig: MEDIUMTEXT speichert Zeichenfolgen bis zu 16 MB, LONGTEXT bis zu 4 GB. Wenn Sie LONGTEXT verwenden und die Daten über PHP abrufen (zumindest wenn Sie mysqli ohne _store_result_ verwenden), wird möglicherweise ein Speicherzuordnungsfehler angezeigt, da PHP versucht, sie zuzuordnen 4 GB Speicher, um sicherzustellen, dass der gesamte String gepuffert werden kann. Dies geschieht möglicherweise auch in anderen Sprachen als PHP.

Sie sollten jedoch die Eingabe immer überprüfen (Ist sie zu lang? Enthält sie fremden Code?) , bevor Speichern in der Datenbank.

Hinweis: Bei beiden Typen hängt der erforderliche Speicherplatz nur von der Länge der gespeicherten Zeichenfolge und nicht von der maximalen Länge ab.
ZB Wenn Sie den Zeichensatz latin1 verwenden und den Text "Test" in VARCHAR(30), VARCHAR(100) und TINYTEXT speichern, werden immer 5 Bytes (1 Byte zum Speichern der Länge benötigt Zeichenfolge und 1 Byte für jedes Zeichen). Wenn Sie denselben Text in einer VARCHAR(2000)- oder einer TEXT-Spalte speichern, wird ebenfalls derselbe Speicherplatz benötigt. In diesem Fall sind es jedoch 6 Byte (2 Byte zum Speichern der Zeichenfolgenlänge und 1 Byte für jedes Zeichen).

Weitere Informationen finden Sie in der Dokumentation .

Abschließend möchte ich noch einen Hinweis hinzufügen, dass sowohl TEXT als auch VARCHAR Datentypen mit variabler Länge sind und daher höchstwahrscheinlich den zum Speichern der Daten erforderlichen Speicherplatz minimieren. Dies bringt jedoch einen Kompromiss mit der Leistung mit sich. Wenn Sie eine bessere Leistung benötigen, müssen Sie einen Typ mit fester Länge wie CHAR verwenden. Sie können mehr darüber lesen hier .

449
AbcAeffchen