In MySQL sollte die Länge wirklich immer 255 oder 65.535 sein (außer es gibt typspezifische Gründe für die Wahl einer anderen Länge). Es gibt zwei verschiedene Arten, Zeichenketten zu speichern. Bei Längen bis zu 255 wird die Länge in einem Byte statt in zwei gespeichert, wodurch ein Speicherbyte eingespart wird.
In einem varchar
ist die Länge die maximale Länge. Die Werte werden auf der Seite basierend auf ihrer tatsächlichen Länge gespeichert. Die maximale Länge hat also keinen Einfluss auf die Speicherung von irgendetwas anderem, mit Ausnahme von 1- oder 2-Byte-Längen (abhängig davon, ob das Maximum < = 255 oder> = 256 ist). (Die Länge ist eine Zweierpotenz - mit Ausnahme von 256 - hat keine Auswirkungen auf den Speicher.)
Wie für die Einstellung von Längen als Zweierpotenzen. Ich bin bei vielen Gelegenheiten schuldig. Es ist eine alte Gewohnheit, die darauf gerichtet ist, die Felder auf Bytegrenzen ausgerichtet zu halten. Die Idee war, Felder auf 4- oder 8-Byte-Grenzen auszurichten, da dies für die CPU optimal ist (man denke an die Programmiersprache "C"). Dies verhinderte entweder unnötigen Speicherplatz, wenn ein Integer- oder Fließkommawert eine 4- oder 8-Byte-Ausrichtung erforderte (so dass einige Bytes verpasst wurden) oder unnötiger Overhead, um Bytes von einem nicht ausgerichteten Speicherbereich in einen ausgerichteten Speicherbereich zu kopieren. Natürlich, wie ich gerade bemerkt habe, hat diese Logik keine Grundlage für Datenbanken, da die maximale Länge den tatsächlichen Speicher auf der Seite nicht beeinflusst.
Ein weiterer Grund, warum dies keine Bedeutung hat, ist, dass der Typ varchar
tatsächlich ein oder zwei Bytes mehr als die Länge speichert. Die Datenbank kümmert sich um die Umwandlung von dem physikalischen Format auf der Seite in das physikalische Format im Speicher. Der Versuch, diesen Prozess zu "optimieren", ist weitaus aufwändiger als es sich lohnt.
+1. Die Länge eines varchar() - Feldes sollte keinen großen Unterschied machen. –
interessant ..Hast du Leads in der MySQL-Dokumentation gefunden oder ist das eine Vermutung? –
eigentlich bevorzuge ich es, varchar length als x power von 2 zu wählen, es ist intuitiver für Entwickler. : / –