Im Speicher VARCHAR(255)ist es intelligent genug, nur die Länge zu speichern, die Sie in einer bestimmten Zeile benötigen, im Gegensatz dazu, in CHAR(255)der immer 255 Zeichen gespeichert würden.
Da Sie diese Frage jedoch mit MySQL markiert haben, erwähne ich einen MySQL-spezifischen Tipp: Wenn Zeilen von der Storage Engine-Schicht in die SQL-Schicht kopiert werden, werden VARCHARFelder in konvertiert CHAR, um den Vorteil der Arbeit mit Zeilen mit fester Breite zu erzielen. So werden die Zeichenfolgen im Speicher auf die maximale Länge Ihrer deklarierten VARCHARSpalte aufgefüllt .
Wenn Ihre Abfrage implizit eine temporäre Tabelle generiert, beispielsweise beim Sortieren oder GROUP BY, kann dies viel Speicherplatz beanspruchen. Wenn Sie viele VARCHAR(255)Felder für Daten verwenden, die nicht so lang sein müssen, kann dies die temporäre Tabelle sehr groß machen.
Vielleicht möchten Sie auch wissen, dass dieses "Auffüllen" -Verhalten bedeutet, dass eine mit dem utf8-Zeichensatz deklarierte Zeichenfolge auf drei Bytes pro Zeichen aufgefüllt wird, selbst für Zeichenfolgen, die Sie mit Einzelbyte-Inhalten speichern (z. B. ASCII- oder Latin1-Zeichen). Ebenso bewirkt der Zeichensatz utf8mb4, dass die Zeichenfolge auf vier Bytes pro Zeichen im Speicher aufgefüllt wird.
Ein VARCHAR(255)in utf8, das eine kurze Zeichenfolge wie "Keine Meinung" speichert, benötigt also 11 Bytes auf der Festplatte (zehn Zeichen mit niedrigerem Zeichensatz plus ein Byte für die Länge), aber 765 Bytes im Speicher und damit in temporären Tabellen oder sortierten Ergebnissen.
Ich habe MySQL-Benutzern geholfen, die unwissentlich häufig 1,5-GB-temporäre Tabellen erstellt und ihren Speicherplatz gefüllt haben. Sie hatten viele VARCHAR(255)Spalten, in denen in der Praxis sehr kurze Zeichenfolgen gespeichert waren.
Definieren Sie die Spalte am besten basierend auf dem Datentyp, den Sie speichern möchten. Es hat Vorteile, anwendungsbezogene Einschränkungen durchzusetzen, wie andere Leute erwähnt haben. Aber es hat die physischen Vorteile, die oben beschriebene Speicherverschwendung zu vermeiden.
Es ist natürlich schwer zu wissen, wie die längste Postanschrift lautet, weshalb viele Leute eine lange wählen VARCHAR, die sicherlich länger ist als jede andere Adresse. Und 255 ist üblich, weil es die maximale Länge von a ist, VARCHARfür die die Länge mit einem Byte codiert werden kann. Es war auch die maximale VARCHARLänge in MySQL älter als 5.0.