it-swarm.com.de

Warum sollte ich in MySQL jemals eine andere Länge als 255 für varchar wählen?

Ich kenne den Unterschied zwischen CHAR und VARCHAR,

CHAR - Feste Länge

VARCHAR - Variable Länge (Größe + 1 Byte)

Aber ich wollte wissen, was die Absicht war, die Option für eine Varchar-Länge zu haben, z. VARCHAR(50), VARCHAR(100), VARCHAR(255)

Dies erscheint mir sinnlos, da der tatsächlich verwendete Speicherplatz von dem in der Datenbank gespeicherten Wert abhängt.

Meine Fragen sind also:

1) Es ist in Ordnung, alle meine varchar's auf 255 zu setzen. 2) Warum sollten Sie eine andere Länge angeben?

35
Lizard

1) Wenn Sie die maximale Größe eines gespeicherten varchar nicht begrenzen möchten, ist dies in Ordnung. Das wird gesagt ...

2) In vielen Fällen möchten Sie eine Obergrenze für die Größe eines Varchar festlegen. Nehmen wir an, Sie speichern eine Mailing-Liste und haben nur einen begrenzten Platz für eine Adresszeile. Durch das Festlegen einer Obergrenze für das Adressfeld können Sie der Datenbank jetzt erlauben, eine maximale Adresszeilenlänge für Sie durchzusetzen.

21
MarkD

Auszug aus der MySQL-Dokumentation :

Die CHAR- und VARCHAR-Typen sind ähnlich, unterscheiden sich jedoch in der Art und Weise, in der sie gespeichert und abgerufen werden. Seit MySQL 5.0.3 unterscheiden sie sich auch in der maximalen Länge und darin, ob nachfolgende Leerzeichen beibehalten werden.

Die Typen CHAR und VARCHAR werden mit einer Länge deklariert, die die maximale Anzahl von Zeichen angibt, die Sie speichern möchten. CHAR (30) kann beispielsweise bis zu 30 Zeichen enthalten.

Die Länge einer CHAR-Spalte ist auf die Länge festgelegt, die Sie beim Erstellen der Tabelle angeben. Die Länge kann ein beliebiger Wert zwischen 0 und 255 sein. Wenn CHAR-Werte gespeichert werden, werden sie mit Leerzeichen auf die angegebene Länge aufgefüllt. Wenn CHAR-Werte abgerufen werden, werden nachfolgende Leerzeichen entfernt.

Werte in VARCHAR-Spalten sind Zeichenfolgen mit variabler Länge. Die Länge kann als Wert von 0 bis 255 vor MySQL 5.0.3 und von 0 bis 65.535 in 5.0.3 und späteren Versionen angegeben werden. Die effektive maximale Länge einer VARCHAR in MySQL 5.0.3 und höher hängt von der maximalen Zeilengröße (65.535 Byte, die von allen Spalten gemeinsam genutzt wird) und dem verwendeten Zeichensatz ab.

Im Gegensatz zu CHAR werden VARCHAR-Werte als Präfix mit einer Länge von 1 Byte oder 2 Byte plus Daten gespeichert. Das Längenpräfix gibt die Anzahl der Bytes im Wert an. Eine Spalte verwendet ein Längenbyte, wenn für Werte nicht mehr als 255 Byte erforderlich sind. Zwei Längenbytes, falls Werte mehr als 255 Byte erfordern.

19
Jauzsika

CHAR Vs VARCHAR

CHAR wird für Variable mit fester Länge verwendet.
VARCHAR wird für variable Längengrößenvariable verwendet. 

Z.B.

create table emp
(f_name CHAR(20),
 l_name VARCHAR(20)
);

insert into emp values('Suraj','Chandak');

select length(f_name), length(l_name) from emp;

Output will be

length(f_name)          Length(l_name)
   20                       7

Die beste Antwort für CHAR vs VARCHAR

Bearbeiten 

  • Sie können die maximale Obergrenze für die Spalte festlegen.
  • Leistung und Lagerung können Auswirkungen haben.

Vielen Dank.

4
Aniket Kulkarni

Tabellen mit fester Länge (statisch) sind schneller. Wenn jede einzelne Spalte in einer Tabelle "feste Länge" hat, wird die Tabelle auch als "statisch" oder "feste Länge" betrachtet. Beispiele für Spaltentypen, die NICHT mit fester Länge sind, sind: VARCHAR, TEXT, BLOB.

http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/

Wenn Ihre Tabelle keine anderen Felder enthält, die varchar, text oder blob sind; Sie können char verwenden und Ihre Tabelle statisch machen. So sind sie schneller.

3
musafar006

1) Technisch ist es in Ordnung, da die Felder am Anfang nur 1 oder 2 Byte lang sind. Danach wachsen sie nach Bedarf.

2) Allerdings legen gute Design-Prinzipien nahe, dass Sie die Feldlängen entsprechend festlegen. A) Wenn jemand das Tabellenschema durchläuft und versucht, herauszufinden, wie viele Daten in bestimmten Feldern gespeichert sind, kann er feststellen, dass bestimmte Felder weniger enthalten Daten als andere und b) Sie können kleine Mengen zusätzlicher Arbeit, die von der Datenbank-Engine geleistet werden, verhindern, da während eines Einfügens weniger Platz von einem VARCHAR (10) -Feld als von einem VARCHAR (255) abgeschnitten werden muss.

Hier können Sie zusätzliche Details anzeigen:

http://dev.mysql.com/doc/refman/5.0/de/char.html

1
user174624

Ich habe an anderer Stelle gelesen, dass Varchar mit einem Leistungstreffer relativ zu char einhergeht, wenn Sie selects gegen mit ihnen definierte Spalten ausführen. Vielleicht möchten Sie char auswählen, wenn Sie sicher sind, dass das Feld immer eine bestimmte Länge hat, und Sie Leistungsprobleme haben ...

1
Greg Gauthier

Der Hauptunterschied zwischen diesen beiden Werttypen tritt beim Vergleich zwischen Zeichenfolgen auf.

In einer CHAR-Spalte, deren Länge vordefiniert ist, müssen Sie die gesamte Länge der Spalte "durchlaufen", während Sie in der Spalte VARCHAR die gesamte Länge und nicht die gesamte Länge "durchlaufen" müssen ist in den meisten Fällen viel schneller.

Daher wird eine Wertlänge, die kleiner als die Feldlänge ist, schneller verglichen, wenn sie in einem VARCHAR-Feld gespeichert wird.

1
Alon Kogan

Aber ich wollte wissen, was die Absicht war, die Option für eine Varchar-Länge zu haben, z. VARCHAR (50), VARCHAR (100), VARCHAR (255)

Dies erscheint mir sinnlos, da der tatsächlich verwendete Speicherplatz von dem in der Datenbank gespeicherten Wert abhängt.

Angabe, z. VARCHAR (5) anstelle von VARCHAR (500) kann in einigen Fällen zu einer besseren Leistung führen, z. für Operationen, die temporäre Tabellen im Arbeitsspeicher verwenden.

Ein anderer Fall ist die Beschränkung der Spaltenlänge, um die Anforderungen der Domäne zu erfüllen (wenn Ihr Wert nicht über einem bestimmten Wert liegen sollte. Beispiel: Der vollständige Domänenname in DNS darf nicht länger als 253 Zeichen sein.

0

1) ja.

2) Historisch war es ein Performance-Hit.

Sehen Sie sich Datenbanken wie sqlite an, die alles als Text speichern, um zu beweisen, dass es nicht mehr wirklich wichtig ist.

0
Toby Allen