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

Belegen char / varchar / text / longtext-Spalten in MySQL die volle Größe im Dateisystem, selbst für teilweise gefüllte Zellen?

Sehen Sie sich http://dev.mysql.com an /doc/refman/5.7/en/string-type-overview.html

Grundsätzlich alle diese Typen außer CHAR sind variabel lang.

Zum Beispiel, wenn Sie VARCHAR(72) haben und Sie schreiben abcd darin speichern Sie 5 Bytes. 4 Byte für jedes Zeichen und ein 1-Byte-Präfix zum Speichern der Länge der Zeichenfolge (die 4 ist).

Wenn die Länge der Zeichenfolge mehr als 255 Zeichen beträgt, beträgt das VARCHAR-Präfix 2 Bytes. Also ein VARCHAR(300) mit einer darin gespeicherten Zeichenfolge mit 256 Zeichen belegt 258 Bytes.

TINYTEXT hat immer ein 1-Byte-Präfix, weil man darin nur 255 Zeichen speichern kann, also abcd würde 5 Bytes nehmen.

TEXT hat ein 2-Byte-Präfix, also abcd wären 6 Bytes.

LONGTEXT hat ein 4-Byte-Präfix, also abcd wären 8 Bytes.

Schließlich gibt es noch das fast nutzlose CHAR Typ. Ein CHAR(72) nimmt immer 72 Bytes ein, egal was Sie darin speichern. Es ist wirklich nur für superkurze Felder sinnvoll, wo es immer genau die gleiche Anzahl von Zeichen im Feld gibt. Wie Y oder N wäre ein gutes CHAR(1) Kandidat.