vorgenanntVARCHAR und CHAR sind die beiden wichtigsten Zeichenfolgentypen. Leider ist es schwierig, genau zu erklären, wie diese Werte auf der Festplatte und im Speicher gespeichert werden, da dies von der spezifischen Implementierung der Speicher-Engine abhängt. Die folgende Beschreibung geht davon aus, dass die verwendete Speicher-Engine InnoDB und/oder MyISAM ist. Wenn Sie diese beiden Speicher-Engines nicht verwenden, lesen Sie bitte die Dokumentation der von Ihnen verwendeten Speicher-Engine. Schauen wir uns zunächst an, wie VARCHAR- und CHAR-Werte normalerweise auf der Festplatte gespeichert werden. Beachten Sie, dass die Speicher-Engine CHAR- oder VARCHAR-Werte im Speicher und auf der Festplatte möglicherweise unterschiedlich speichert, sodass der vom MySQL-Server aus der Speicher-Engine gelesene Wert möglicherweise in ein anderes Speicherformat konvertiert werden muss. VARCHAR-TypDer Typ VARCHAR wird zum Speichern von Zeichenfolgen variabler Länge verwendet und ist der am häufigsten verwendete Zeichenfolgendatentyp. Es ist platzsparender als Typen mit fester Länge, da es nur den nötigen Platz nutzt (kürzere Zeichenfolgen benötigen beispielsweise weniger Platz). Es gibt eine Ausnahme. Wenn die MySQL-Tabelle mit ROW_FORMAT=FIXED erstellt wird, wird jede Zeile mit einer festen Länge gespeichert, was zu Platzverschwendung führt. VARCHAR erfordert 1 oder 2 zusätzliche Bytes, um die Länge der Zeichenfolge aufzuzeichnen : Wenn die maximale Länge der Spalte kleiner oder gleich 255 Bytes ist, wird nur 1 Byte zur Darstellung verwendet, andernfalls werden 2 Bytes verwendet. Bei Verwendung des Zeichensatzes Latin1 benötigt eine VARCHAR(10)-Spalte 11 Byte Speicherplatz. Eine VARCHAR(1000)-Spalte benötigt 1002 Bytes, da 2 Bytes zum Speichern der Längeninformation benötigt werden. VARCHAR spart Speicherplatz und trägt somit auch zur Leistung bei. Da die Zeilenlänge jedoch variabel ist, kann ein UPDATE dazu führen, dass die Zeile länger wird als zuvor, was zusätzlichen Arbeitsaufwand bedeutet. Wenn die Größe einer Zeile zunimmt und auf der Seite kein Platz mehr vorhanden ist, um sie zu speichern, handhaben verschiedene Speicher-Engines diese Situation unterschiedlich. Beispielsweise teilt MyISAM die Zeile zur Speicherung in verschiedene Fragmente auf, während InnoDB die Seite aufteilen muss, damit die Zeile auf die Seite passt. Bei einigen anderen Speicher-Engines werden die Daten möglicherweise nie direkt aktualisiert. VARCHAR anwendbare SituationenVARCHAR ist in den folgenden Fällen geeignet:
CHAR-TypDer CHAR-Typ hat eine feste Länge: MySQL reserviert immer genügend Speicherplatz für die definierte Zeichenfolgenlänge. Beim Speichern von CHAR-Werten entfernt MySQL alle nachstehenden Leerzeichen. CHAR-Werte werden bei Bedarf mit Leerzeichen aufgefüllt, um den Vergleich zu erleichtern. CHAR eignet sich zum Speichern sehr kurzer Zeichenfolgen oder wenn alle Werte nahezu gleich lang sind. Beispielsweise eignet sich CHAR sehr gut zum Speichern des MD5-Werts eines Kennworts, da es sich um einen Wert mit fester Länge handelt. CHAR ist außerdem für Daten, die sich häufig ändern, besser als VARCHAR, da CHAR-Typen mit fester Länge weniger wahrscheinlich fragmentiert werden. Bei sehr kurzen Spalten ist CHAR auch speicherplatzsparender als VARCHAR. Beispielsweise erfordert die Verwendung von CHAR(1) zum Speichern von Werten, die nur Y und N enthalten, nur ein Byte, wenn ein Einzelbyte-Zeichensatz verwendet wird, aber VARCHAR(1) erfordert zwei Bytes, da ein zusätzliches Byte für die Datensatzlänge vorhanden ist. prüfenDas folgende Beispiel verdeutlicht den Unterschied im Verhalten zwischen CHAR und VARCHAR. Zunächst erstellen wir eine Tabelle mit nur einem CHAR(10)-Feld und fügen dort einige Werte ein: Tabelle erstellen char_test ( char_col CHAR(10) ); INSERT INTO char_test WERTE ('Zeichenfolge1'). ('Zeichenfolge2'). ('Zeichenfolge3'); Wenn wir diese Werte abrufen, stellen wir fest, dass das Leerzeichen am Ende von string3 abgeschnitten ist. SELECT CONCAT("'", char_col, "'") VON char_test; Wenn Sie ein VARCHAR(10)-Feld zum Speichern desselben Wertes verwenden, erhalten Sie das folgende Ergebnis: Tabelle erstellen varchar_test ( varchar_col VARCHAR(10) ); INSERT INTO varchar_test WERTE ('Zeichenfolge1'). ('Zeichenfolge2'). ('Zeichenfolge3'); SELECT CONCAT("'", varchar_col, "'") VON varchar_test; Ausführungsergebnisse Unterschiede zwischen VARCHAR(5) und VARCHAR(200)Wenn wir VARCHAR(5) und VARCHAR(200) zum Speichern von „Hallo“ verwenden, wissen wir, dass der Speicherplatzbedarf bei beiden gleich ist. Können wir also dafür sorgen, dass die Länge von VARCHAR immer groß bleibt? Gibt es Vorteile bei der Verwendung kürzerer Spalten? Es stellt sich heraus, dass es enorme Vorteile gibt. Längere Spalten verbrauchen mehr Speicher, da MySQL normalerweise Speicherblöcke mit fester Größe zuweist, um interne Werte zu speichern. Dies ist insbesondere dann problematisch, wenn temporäre Tabellen im Speicher sortiert oder bearbeitet werden. Beim Sortieren mithilfe temporärer Festplattentabellen ist die Situation ebenso schlecht. Die beste Strategie besteht daher darin, nur den Speicherplatz zuzuweisen, den Sie wirklich benötigen. ZusammenfassenWenn wir den Typ für ein Zeichenfolgenfeld auswählen, können wir die folgenden Aspekte berücksichtigen, um zu bestimmen, ob wir VARCHAR oder CHAR auswählen:
Kurz gesagt, wenn wir den CHAR-Typ auswählen können oder wenn der Platzverbrauch relativ gesehen nicht im Mittelpunkt der Einflussfaktoren steht, versuchen Sie, den CHAR-Typ auszuwählen, da der CHAR-Typ in anderen Aspekten mehr oder weniger Vorteile bietet. Wenn der Speicherplatzverbrauch zu einem wichtigen Faktor wird, ziehen wir die Verwendung des Typs VARCHAR in Betracht. Dies ist das Ende dieses Artikels über den Unterschied zwischen den Typen varchar und char in MySQL. Weitere Informationen zu den Typen varchar und char in MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: So implementieren Sie ein Hover-Dropdown-Menü mit CSS
>>: Vue implementiert Fuzzy-Abfrage-MySQL-Datenbankdaten
Im Allgemeinen sollte die Hintergrundfarbe einer W...
Im wirklichen Leben ist ein Schloss ein Werkzeug,...
Wenn die Tabelle Zehntausende Datensätze enthält,...
Es gibt zwei Möglichkeiten, mit Nginx mehrere Pro...
Inhaltsverzeichnis 1. Experimentelle Umgebung 2. ...
Um eine inkrementelle Sicherung der MySQL-Datenba...
Inhaltsverzeichnis 1. Einleitung 2. Verwendung 1....
Inhaltsverzeichnis 1. Objektänderungserkennung 2....
v-for-Richtlinie Wenn wir von Listen sprechen, mü...
Wie lange ist es her, dass ich meine Kolumne aktu...
Streng genommen verfügt nginx nicht über eine Int...
Innerhalb der Zeilen können die hellen Rahmenfarb...
In allgemeinen Anwendungen verwenden wir die Type...
Inhaltsverzeichnis Was ist Abflachung? Rekursion ...
MySQL ist das beliebteste relationale Datenbankma...