Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Unterschied zwischen VARCHAR und TEXT in MySQL

TL;DR

TEXT

  • feste maximale Größe von 65535 Zeichen (Sie können die maximale Größe nicht begrenzen)
  • nimmt 2 + c Bytes Speicherplatz, wobei c ist die Länge des gespeicherten Strings.
  • kann nicht (vollständig) Teil eines Indexes sein. Man müsste eine Präfixlänge angeben.

VARCHAR(M)

  • variable maximale Größe von M Zeichen
  • M muss zwischen 1 und 65535 liegen
  • nimmt 1 + c Bytes (für M ≤ 255) oder 2 + c (für 256 ≤ M ≤ 65535) Bytes Speicherplatz, wobei c ist die Länge des gespeicherten Strings
  • kann Teil eines Indexes sein

Mehr Details

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

Der andere Unterschied besteht darin, dass Sie keinen Index (außer einem Volltextindex) auf einen TEXT setzen können Spalte.
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 Index ebenfalls begrenzt ist, wenn also Ihr VARCHAR Spalte zu lang ist, müssen Sie nur die ersten paar Zeichen des VARCHAR verwenden Spalte in Ihrem Index (Siehe die Dokumentation für CREATE INDEX ).

Sie möchten aber auch VARCHAR verwenden , wenn Sie wissen, dass die maximale Länge des möglichen Eingabestrings nur M ist , z.B. eine Telefonnummer oder einen Namen oder so etwas. Dann können Sie VARCHAR(30) verwenden statt TINYTEXT oder TEXT und wenn jemand versucht, den Text aller drei "Herr der Ringe"-Bücher in Ihrer Telefonnummernspalte zu speichern, speichern Sie nur die ersten 30 Zeichen :)

Bearbeiten: Wenn der Text, den Sie in der Datenbank speichern möchten, länger als 65535 Zeichen ist, müssen Sie MEDIUMTEXT wählen oder LONGTEXT , aber Vorsicht:MEDIUMTEXT speichert Strings bis zu 16 MB, LONGTEXT bis zu 4GB. Wenn Sie LONGTEXT verwenden und holen Sie sich die Daten per PHP (zumindest wenn Sie mysqli verwenden ohne store_result ), erhalten Sie möglicherweise einen Speicherzuweisungsfehler, da PHP versucht, 4 GB Speicher zuzuweisen, um sicherzustellen, dass der gesamte String gepuffert werden kann. Dies passiert möglicherweise auch in anderen Sprachen als PHP.

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

Hinweis:Bei beiden Typen hängt der benötigte Speicherplatz nur von der Länge des gespeicherten Strings ab und nicht von der maximalen Länge.
Z.B. wenn Sie den Zeichensatz latin1 verwenden und den Text "Test" in VARCHAR(30) speichern , VARCHAR(100) und TINYTEXT , benötigt es immer 5 Bytes (1 Byte zum Speichern der Länge des Strings und 1 Byte für jedes Zeichen). Wenn Sie denselben Text in einem VARCHAR(2000) speichern oder ein TEXT -Spalte, würde es auch den gleichen Platz benötigen, aber in diesem Fall wären es 6 Bytes (2 Bytes 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 und VARCHAR sind Datentypen mit variabler Länge und minimieren daher höchstwahrscheinlich den Speicherplatz, den Sie zum Speichern der Daten benötigen. Dies geht jedoch mit einem Kompromiss für die Leistung einher. Wenn Sie eine bessere Leistung benötigen, müssen Sie einen Typ mit fester Länge wie CHAR verwenden . Mehr darüber können Sie hier lesen .