Was ist der Unterschied zwischen VARCHAR und CHAR in MySQL?
Ich versuche, MD5-Hashes zu speichern.
Was ist der Unterschied zwischen VARCHAR und CHAR in MySQL?
Ich versuche, MD5-Hashes zu speichern.
Antworten:
VARCHAR
ist variabel lang.
CHAR
ist feste Länge.
Wenn Ihr Inhalt eine feste Größe hat, erzielen Sie mit eine bessere Leistung CHAR
.
Eine ausführliche Erklärung finden Sie auf der MySQL-Seite zu CHAR- und VARCHAR-Typen (lesen Sie auch die Kommentare).
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions.
CHAR gegen VARCHAR
CHAR wird für Variablen mit fester Längengröße verwendet
VARCHAR wird für Größenvariablen mit variabler Länge verwendet.
Z.B
Create table temp
(City CHAR(10),
Street VARCHAR(10));
Insert into temp
values('Pune','Oxford');
select length(city), length(street) from temp;
Ausgabe wird sein
length(City) Length(street)
10 6
Schlussfolgerung: Um Speicherplatz effizient zu nutzen, muss VARCHAR anstelle von CHAR verwendet werden, wenn die variable Länge variabel ist
Eine CHAR(x)
Spalte kann nur genau x
Zeichen enthalten.
Eine VARCHAR(x)
Spalte kann bis zu x
Zeichen enthalten.
Da Ihre MD5-Hashes immer dieselbe Größe haben, sollten Sie wahrscheinlich a verwenden CHAR
.
Sie sollten MD5 jedoch nicht in erster Linie verwenden. es hat Schwächen gekannt.
Verwenden Sie stattdessen SHA2.
Wenn Sie Passwörter haschen, sollten Sie bcrypt verwenden.
Was ist der Unterschied zwischen VARCHAR und CHAR in MySQL?
Zu bereits gegebenen Antworten möchte ich hinzufügen, dass in OLTP- Systemen oder in Systemen mit häufigen Aktualisierungen CHAR
aufgrund möglicher VARCHAR
Spaltenfragmentierung während Aktualisierungen die Verwendung auch für Spalten variabler Größe in Betracht gezogen wird .
Ich versuche, MD5-Hashes zu speichern.
MD5-Hash ist nicht die beste Wahl, wenn Sicherheit wirklich wichtig ist. Wenn Sie jedoch eine Hash-Funktion verwenden, ziehen BINARY
Sie stattdessen den Typ in Betracht (z. B. erzeugt MD5 einen 16-Byte-Hash, BINARY(16)
was anstelle von CHAR(32)
32 Zeichen für hexadezimale Ziffern ausreicht . Dies würde mehr Platz sparen und die Leistung beeinträchtigen.
Varchar schneidet nachgestellte Leerzeichen ab, wenn die eingegebenen Zeichen kürzer als die angegebene Länge sind, während char dies nicht tut. Char füllt Leerzeichen auf und ist immer die Länge der angegebenen Länge. In Bezug auf die Effizienz ist varchar geschickter, da es Zeichen trimmt, um mehr Anpassungen zu ermöglichen. Wenn Sie jedoch die genaue Länge von char kennen, wird char mit etwas mehr Geschwindigkeit ausgeführt.
In den meisten heutigen RDBMS sind sie Synonyme. Für Systeme, die noch eine Unterscheidung aufweisen, wird jedoch ein CHAR-Feld als Spalte mit fester Breite gespeichert. Wenn Sie es als CHAR (10) definieren, werden 10 Zeichen in die Tabelle geschrieben, wobei "Auffüllen" (normalerweise Leerzeichen) verwendet wird, um alle Leerzeichen auszufüllen, die die Daten nicht belegen. Zum Beispiel würde das Speichern von "bob" als ("bob" +7 Leerzeichen) gespeichert. Eine VARCHAR-Spalte (variables Zeichen) soll Daten speichern, ohne den zusätzlichen Speicherplatz zu verschwenden, den eine CHAR-Spalte bietet.
Wie immer spricht Wikipedia lauter.
CHAR ist ein Feld fester Länge; VARCHAR ist ein Feld variabler Länge. Wenn Sie Zeichenfolgen mit einer stark variablen Länge wie Namen speichern, verwenden Sie ein VARCHAR. Wenn die Länge immer gleich ist, verwenden Sie ein CHAR, da es etwas größeneffizienter und auch etwas schneller ist.
CHAR ist eine feste Länge und VARCHAR ist eine variable Länge. CHAR verwendet immer den gleichen Speicherplatz pro Eintrag, während VARCHAR nur den zum Speichern des tatsächlichen Texts erforderlichen Speicherplatz verwendet.
Das Zeichen ist ein Zeichendatentyp mit fester Länge, das Varchar ist ein Zeichendatentyp mit variabler Länge.
Da char ein Datentyp mit fester Länge ist, entspricht die Speichergröße des char-Werts der maximalen Größe für diese Spalte. Da varchar ein Datentyp mit variabler Länge ist, entspricht die Speichergröße des varchar-Werts der tatsächlichen Länge der eingegebenen Daten und nicht der maximalen Größe für diese Spalte.
Sie können char verwenden, wenn erwartet wird, dass die Dateneinträge in einer Spalte dieselbe Größe haben. Sie können varchar verwenden, wenn erwartet wird, dass die Dateneinträge in einer Spalte erheblich variieren.
laut High Performance MySQL- Buch:
VARCHAR speichert Zeichenfolgen variabler Länge und ist der am häufigsten verwendete Zeichenfolgendatentyp. Es kann weniger Speicherplatz als Typen mit fester Länge benötigen, da es nur so viel Speicherplatz benötigt, wie es benötigt (dh weniger Speicherplatz wird zum Speichern kürzerer Werte verwendet). Die Ausnahme ist eine mit ROW_FORMAT = FIXED erstellte MyISAM-Tabelle, die für jede Zeile einen festen Speicherplatz auf der Festplatte verwendet und somit Speicherplatz verschwenden kann. VARCHAR hilft Leistung, weil es Platz spart.
CHAR hat eine feste Länge: MySQL weist immer genügend Speicherplatz für die angegebene Anzahl von Zeichen zu. Beim Speichern eines CHAR-Werts entfernt MySQL alle nachgestellten Leerzeichen. (Dies galt auch für VARCHAR in MySQL 4.1 und älteren Versionen - CHAR und VAR CHAR waren logisch identisch und unterschieden sich nur im Speicherformat.) Die Werte werden nach Bedarf mit Leerzeichen aufgefüllt.
VARCHAR
muss Speicher dynamisch nach Bedarf zuweisen, wodurch die Leistung im Gegensatz zu reduziert wird CHAR
, oder?
Char
hat eine feste Länge (unterstützt 2000 Zeichen), es steht für Zeichen ist ein Datentyp
Varchar
hat eine variable Länge (unterstützt 4000 Zeichen)
Char oder varchar- wird verwendet, um Textdaten einzugeben, wobei die Länge in Klammern angegeben werden kann. Egname char (20)
(
und )
sind Klammern, keine Klammern.
(
und )
Klammern, und viele Briten erkennen wahrscheinlich nicht einmal, dass es Dialekte des Englischen gibt, in denen sich das Wort "Klammer" auf ein Interpunktionszeichen beziehen kann. Es gibt ein starkes Argument dafür, "Klammern" gegenüber "Klammern" vorzuziehen - es ist wahrscheinlich insgesamt die maximal klare Option, wenn ein internationales Publikum von Programmierern angesprochen wird -, aber es ist ein komplizierterer Fall als "Klammern", die einfach falsch sind.