Antwort 1:

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.

Der andere Unterschied besteht darin, dass Sie keinen Index (außer einem Volltextindex) für eine TEXT-Spalte erstellen können. Wenn Sie also einen Index für die Spalte haben möchten, müssen Sie VARCHAR verwenden.

Weitere Informationen zu VARCHAR und TEXT in MySQL finden Sie hier


Antwort 2:

Wie bereits erwähnt, haben sie unterschiedliche Längen. Intern ist der Unterschied jedoch erheblich.

Bei den meisten Typen werden alle Daten für jede Zeile zusammen gespeichert. Die größeren Typen: Blob und Text werden separat gespeichert. Dies bedeutet, dass die Leistung beeinträchtigt wird.

Wenn die Datenbank eine Tabelle liest und auf die Textspalten zugreifen muss, muss sie viel mehr nach Datenträgern suchen. Aus diesem Grund ist es besonders wichtig, nur die Spalten auszuwählen, die Sie für diese Tabellen benötigen. Die Datenbank muss nicht die zusätzliche Arbeit erledigen, um zum Speicher für Blobs und Text zu springen.

Wenn Sie Textspalten indizieren, können Sie einen Präfixindex verwenden. Diese Indizes verfolgen nur die ersten X-Zeichen in der Spalte. Andernfalls möchten Sie für die meisten Datenbanken wahrscheinlich ein separates Indizierungswerkzeug wie Elastic verwenden. Diese sind viel schneller als die interne Engine für MySQL und wahrscheinlich auch für andere. Sie können natürlich die interne Engine verwenden, dies ist ein Kompromiss zwischen Leistung und Einfachheit.


Antwort 3:

TEXT hat eine feste maximale Größe von 65535 Zeichen. Diese maximale Größe kann nicht begrenzt werden. TEXT benötigt 2 + n Byte Speicherplatz, wobei n die Länge der gespeicherten Zeichenfolge ist. Beispielsweise würde ein Wort mit 10 Buchstaben 12 Byte Speicherplatz benötigen. Auch der TEXT-Datentyp kann in MySQL nicht Teil eines Index sein.

VARCHAR hat eine variable Größe mit einer Höchstgrenze von 65535 Zeichen. VARCHAR belegt 1 + n Byte (für Länge ≤ 255) und 2 + n (für 256 ≤ Länge ≤ 65535) Speicherplatz, wobei n die Länge der gespeicherten Zeichenfolge ist. Auch der Datentyp VARCHAR kann Teil von MySQL sein und diesen indizieren.