2010-07-01 12 views
33

Ich kenne den differnce zwischen CHAR und VARCHAR,Warum sollte ich jemals eine andere Länge als 255 für varchar in MySQL wählen?

CHAR - Fixlänge

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

Aber ich wollte wissen, was war das purpse der die Option für eine varchar Länge hat, z VARCHAR(50), VARCHAR(100), VARCHAR(255)

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

Also meine Fragen sind:

1) Es ist in Ordnung zu setzen all meiner varchar bis 255 2) Warum würden Sie eine andere Länge angeben?

+1

mögliches Duplikat von [Gibt es Nachteile bei der Verwendung eines generischen varchar (255) für alle textbasierten Felder?] (Http://stackoverflow.com/questions/262238/are-there-diedanta-to-using-a -generic-varchar255-für-alle-text-based-fields) –

+0

Auch http://stackoverflow.com/questions/1262174/mysql-why-use-varchar20-instead-of-varchar255 –

+6

Dachte immer die MySQL-Dokumentation war ziemlich gut darin, den Unterschied zu erklären: http://dev.mysql.com/doc/refman/5.0/en/char.html –

Antwort

21

1) Wenn Sie die maximale Größe eines gespeicherten varchar nicht begrenzen möchten, dann ist es in Ordnung. Das heißt ...

2) In vielen Fällen möchten Sie eine Obergrenze für die Größe eines Varchar festlegen. Angenommen, Sie speichern eine Mailing-Liste und haben einen begrenzten Platz für eine Adresszeile. Indem Sie eine Obergrenze für Ihr Adressfeld festlegen, erlauben Sie der Datenbank, eine maximale Adresszeilenlänge für Sie zu erzwingen.

19

Auszug aus den MySQL documentation:

Die CHAR und VARCHAR-Typen sind ähnlich, unterscheiden sie aber in der Art, wie sie gespeichert und abgerufen. Ab MySQL 5.0.3 unterscheiden sie sich auch in der maximalen Länge und darin, ob nachgestellte Leerzeichen beibehalten werden.

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

Die Länge einer CHAR-Spalte wird 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 rechts mit Leerzeichen auf die angegebene Länge aufgefüllt. Wenn CHAR-Werte abgerufen werden, werden nachfolgende Leerzeichen entfernt.

Werte in VARCHAR-Spalten sind Zeichenfolgen variabler Länge. Die Länge kann als ein Wert von 0 bis 255 vor MySQL 5.0.3 und von 0 bis 65.535 in 5.0.3 und höheren Versionen angegeben werden. Die effektive maximale Länge eines 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 Ein-Byte- oder Zwei-Byte-Längenpräfix plus Daten gespeichert. Das Längenpräfix gibt die Anzahl der Bytes im Wert an. Eine Spalte verwendet ein Längenbyte, wenn Werte nicht mehr als 255 Byte benötigen, zwei Längenbytes, wenn Werte mehr als 255 Byte erfordern.

+6

Beachten Sie, dass Sie beim Zitat auf die Quelle verlinken. –

+0

Eine kleine Korrektur: Die verknüpfte Dokumentation sagt 'VARCHAR' hat eine Obergrenze von 65.535 für MySQL> = 5.0.3. Zitat: "' Die Länge kann als ein Wert von 0 bis 255 vor MySQL 5.0.3 und 0 bis 65.535 in 5.0.3 und späteren Versionen angegeben werden. "" – jweyrich

1

1) Technisch ist es in Ordnung, weil die Felder am Anfang nur mit 1 oder 2 Bytes Länge erstellt werden. Danach werden sie wachsen wie nötig.

2) Aber gute Designprinzipien legen nahe, dass Sie Feldlängen entsprechend festlegen sollten a) Wenn jemand das Tabellenschema durchgeht und versucht herauszufinden, wie viele Daten in bestimmten Feldern gespeichert sind, können sie das sicher sehen Felder enthalten weniger Daten als andere und b) Sie können kleine Mengen an zusätzlicher Arbeit verhindern, die von der Datenbank-Engine ausgeführt wird, da weniger Speicherplatz von einem VARCHAR (10) -Feld als VARCHAR (255) während einer Einfügung abgeschnitten werden muss.

können Sie zusätzliche Details hier darüber lesen:

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

1

ich an anderer Stelle gelesen, dass varchar kommt mit einem Performance-Einbußen in Bezug auf char, wenn Sie wählt gegen Spalten laufen mit ihnen definiert. Also, vielleicht möchten Sie Char wählen, wenn Sie sicher wissen, das Feld wird immer eine bestimmte Länge haben, und Sie haben Leistungsprobleme ...

+0

Ich möchte eine Referenz für diesen Anspruch sehen. – dotancohen

+0

Schön genug, und ich würde Ihnen einen geben, nur dieser Kommentar war vor über drei Jahren, und ich kann mich nicht einmal erinnern, wo ich es gesehen habe. –

0

1) Ja.

2) Historisch war es ein Performance-Hit.

Betrachten Sie Datenbanken wie SQLite, die alles als Text für den Beweis speichern, dass es nicht mehr wirklich wichtig ist.

+4

sqlite ist nicht gerade eine Datenbank mit hoher Performance - und varchar ist ein Performance-Hit, wenn es die Zeilengröße zwingt, variabel zu sein. – qdot

+0

Ja, aber für die meisten Leute und die meisten nutzt es schnell genug –

+4

Richtig, aber behaupten, dass es nicht mehr wichtig ist und sqlite als Höhepunkt der Datenbank-Engineering ist wirklich irreführend. Und nein, für die meisten Leute und die meisten Anwendungen ist es nicht schnell genug - es ist am einfachsten zu konfigurieren und das überwiegt die Kosten, zumindest anfänglich .. solange Sie nie gleichzeitige Anfragen von mehr als einem Benutzer haben, ist. – qdot

4

CHAR Vs VARCHAR

CHAR für Fixed Length Größe Variable verwendet.
VARCHAR wird für Variable Length Size Variable verwendet.

z.

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 maximale Obergrenze für die Spalte festlegen.
  • Leistung und Speicher können Wirkung haben.

Danke.

+0

Die Frage ist "1) Es ist in Ordnung, alle meine varchar auf 255 2) Warum möchten Sie eine andere Länge angeben?", Nicht CHAR vs VARCHAR. – Davor

0

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

In einer CHAR-Spalte, deren Länge vordefiniert ist, müssen Sie den ganzen Weg über die Spaltenlänge "laufen", während Sie in der VARCHAR-Spalte den ganzen Weg über die Wertlänge "laufen" müssen Spaltenlänge, die in den meisten Fällen viel schneller ist.

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

0

Aber ich wollte wissen, was der Zweck der Option für eine varchar Länge war, z. VARCHAR (50), VARCHAR (100), VARCHAR (255)

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

Angeben von z.B. VARCHAR (5) anstelle von VARCHAR (500) kann Ihnen in einigen Fällen, z. für Operationen, die speicherinterne temporäre Tabellen verwenden.

Ein anderer Fall ist die Spaltenlänge zu beschränken Domain Anforderungen zu ergänzen (wenn der Wert nicht dann einig Maxima größer sein sollte. Beispiel: vollständige Domain-Namen in DNS nicht die Länge von 253 Zeichen nicht überschreiten dürfen)

3

Tabellen 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 KEINE feste Länge haben, sind: VARCHAR, TEXT, BLOB.

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

Also, wenn Sie Ihre Tabelle hat keine andere Felder, die Varchar, Text oder Blob sind; Sie können Char verwenden und Ihren Tisch zu einem statischen machen. Auf diese Weise sind sie schneller.

+1

Diese Antwort hat nichts mit der hier gestellten Frage zu tun. – Davor

+0

und Sie haben Recht. Ich kann mich nicht erinnern, warum ich diese Antwort gepostet habe. Vielleicht zu dieser Zeit suchte ich nach etwas Verwandtem. Vielleicht hat er seine Frage bearbeitet? – musafar006

+0

Dunno, könnte sein. Ich weiß nicht, wie ich seine Bearbeitungsgeschichte sehen soll, oder ob ich genug Ansehen habe, um sie überhaupt zu sehen. – Davor