Aus MySQL Dokumentation :
Der Unterschied zwischen CHAR
und VARCHAR
Werte ist die Art, wie sie gespeichert werden, CHAR (10)
erfordert 10 Byte Speicherplatz, egal wie viele Zeichen Sie verwenden, da die Daten rechts mit Leerzeichen aufgefüllt werden, VARCHAR (10)
Nimmt nur 1 Byte (im 1-Byte-Zeichensatz) + Längenpräfix (1, wenn die Länge 255 oder weniger beträgt, sonst 2 ... Ich weiß nicht, warum key_len für EXPLAIN
). 2 Bytes hinzufügen)
Ich verstehe nicht, was Sie mit nachgestellten Leerzeichen meinen, obwohl ich mir vorstellen kann, dass Sie sich mit VARCHAR
auf den Überschuss an nachgestellten Leerzeichen beziehen diese werden mit einer Warnung abgeschnitten, währenddessen in CHAR
Spalten werden diese Leerzeichen stillschweigend abgeschnitten, das hat einen Sinn, weil CHAR
werden mit abschließenden Leerzeichen am Ende gespeichert.
Zum Zeichensatz in diesem Link Sie können sehen, dass die Anzahl der Zeichen für CHAR
oder VARCHAR
ist das gleiche, obwohl Ihr Speicher 1 bis 4 Bytes pro Zeichen benötigt, hier
ist die Liste der unterstützten Zeichensätze und hier die Bytes pro Zeichen.
Was ich über verschiedene Zeilenformate für InnoDB gelesen habe
Eigenschaften des redundanten Zeilenformats :
Eigenschaften des COMPACT-Zeilenformats :