Mysql
 sql >> Database >  >> RDS >> Mysql

Le colonne char/varchar/text/longtext in MySQL occupano la dimensione intera nel filesystem anche per celle parzialmente riempite?

Dai un'occhiata a http://dev.mysql.com /doc/refman/5.7/en/string-type-overview.html

Fondamentalmente, tutti questi tipi tranne il CHAR sono di lunghezza variabile.

Ad esempio, se hai VARCHAR(72) e scrivi abcd al suo interno, memorizzerai 5 byte. 4 byte per ogni carattere e un prefisso di 1 byte per memorizzare la lunghezza della stringa (che è 4).

Se la lunghezza della stringa supera i 255 caratteri, il prefisso VARCHAR sarà di 2 byte. Quindi un VARCHAR(300) con una stringa di 256 caratteri memorizzata occuperà 258 byte.

TINYTEXT ha sempre un prefisso di 1 byte, perché puoi memorizzare solo 255 caratteri, quindi abcd richiederebbe 5 byte.

TEXT ha un prefisso di 2 byte, quindi abcd sarebbero 6 byte.

LONGTEXT ha un prefisso di 4 byte, quindi abcd sarebbero 8 byte.

Infine, c'è il quasi inutile CHAR genere. Un CHAR(72) occuperà sempre 72 byte, indipendentemente da ciò che memorizzi al suo interno. È davvero utile solo per campi super brevi in ​​cui c'è sempre lo stesso numero di caratteri nel campo. Come Y o N sarebbe un buon CHAR(1) candidato.