Wymagania dotyczące miejsca na kolumnę TEKST MySQL

0

Mam tabelę MySQL o nazwie errormsg2przy użyciu silnika pamięci MyISAM z kilkanaście kolumn.

Szacuję, że dwie z tych kolumn zajmują większość miejsca używanego dla każdego wiersza i są typu danych TEKST. Oni są backtracei msg.

Próbuję oszacować ilość miejsca wymaganego dla każdego wiersza i natrafiłem na następującą sprzeczność:

show table status where name = 'errormsg2';pokazuje, że (data_length + index_length) / rowsjest to około 778 bajtów na wiersz.

select avg( bit_length( em.backtrace ) + bit_length( em.msg ) ) / 8 from errormsg2 em; pokazuje średnio 899 bajtów tekstu na wiersz tylko z tych dwóch kolumn.

Jak to możliwe, że tabela przechowuje więcej danych, niż wykorzystuje? czego mi brakuje?

Scott
źródło

Odpowiedzi:

1

Jedną rzeczą do rozważenia są problemy z kodowaniem. Na przykład UTF-8 używa 5 bajtów dla niektórych znaków. Jeśli nie masz danych lub danych zmiennych, baza danych jest zmuszana przyjąć najgorsze: każdy znak może mieć długość 5 bajtów. Dlatego może przydzielić więcej, niż faktycznie musi wykorzystać.

Zauważ, że UTF-16, choć rzekomo ma tylko 2 bajty, może również paść ofiarą tego samego rodzaju problemów: musi kodować pary zastępcze, które mają 4 bajty długości. UTF-16 ma wiele innych problemów, a niektórzy rzecznicy zawsze używają UTF-8

jpaugh
źródło