Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie speichert InnoDB Zeichenspalten?

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 :