sql >> Databáze >  >> RDS >> Mysql

Zabírají sloupce char / varchar / text / longtext v MySQL plnou velikost v souborovém systému i pro částečně vyplněné buňky?

Podívejte se na http://dev.mysql.com /doc/refman/5.7/en/string-type-overview.html

V podstatě všechny tyto typy kromě CHAR mají proměnlivou délku.

Například, pokud máte VARCHAR(72) a napíšete abcd do něj uložíte 5 bajtů. 4 bajty pro každý znak a 1 bajtový prefix pro uložení délky řetězce (což je 4).

Pokud je délka řetězce větší než 255 znaků, pak bude mít předpona VARCHAR 2 bajty. Tedy VARCHAR(300) s 256 znakovým řetězcem uloženým v něm zabere 258 bajtů.

TINYTEXT má vždy 1 byte prefix, protože do něj můžete uložit pouze 255 znaků, takže abcd zabere 5 bajtů.

TEXT má 2bajtovou předponu, takže abcd by bylo 6 bajtů.

LONGTEXT má 4bajtovou předponu, takže abcd by bylo 8 bajtů.

Nakonec je tu téměř zbytečný CHAR typ. A CHAR(72) bude vždy zabírat 72 bajtů bez ohledu na to, co do něj uložíte. Je to užitečné opravdu jen pro super krátká pole, kde je v poli vždy přesně stejný počet znaků. Jako Y nebo N by bylo dobré CHAR(1) kandidát.




  1. Jak používat proměnnou tabulky v dynamickém příkazu SQL?

  2. Jaký je nejlepší způsob ukládání souřadnic (zeměpisná délka/šířka, z Map Google) na serveru SQL?

  3. sql join two table

  4. Jaký je nejvíce doporučený způsob ukládání času v PostgreSQL pomocí Javy?