Mamy inżynierów, którzy spłaszczają znormalizowaną strukturę db do tabeli tymczasowej w celu wygenerowania raportu. Kolumny są określone jako TEXT NOT NULL
(Wiem „dlaczego to robią?”; Załóżmy, że się tym zajmujemy).
Używamy MySQL 5.1.48 Community RHEL5 z wtyczką InnoDB 1.0.9 w systemie Linux.
Podczas korzystania z MyISAM nigdy nie napotkaliśmy limitów wielkości tabeli maksymalnych kolumn lub maksymalnej długości wiersza (podczas dochodzenia osiągnęliśmy maksymalny limit kolumn przy 2598 (2599. powoduje błąd 1117). W InnoDB osiągamy limity. Limity te manifestują się podczas tworzenia tabela (bez wstawiania danych) jako:
BŁĄD 1118 (42000) w wierszu 1: Zbyt duży rozmiar wiersza. Maksymalny rozmiar wiersza dla użytego typu tabeli, nie licząc BLOB, wynosi 8126. Musisz zmienić niektóre kolumny na TEXT lub BLOB
Szukam odpowiedzi na następujące pytania:
Jaka jest szczegółowa formuła określania wielkości cząstek w przypadku korzystania z partii kolumn v / v / b / t? Wypróbowałem kilka różnych formałów przy użyciu
varchar(N)
kolumn (gdzie N wynosi od 1 do 512), zestawu znaków UTF8 (* 3) i tylu kolumn, ile zajmie tabela, aż do niepowodzenia. Żadna z kombinacji, które próbowałem, nie podaje wartości zgodnych z rzeczywistymi wynikami testu.Jakie inne „koszty ogólne” muszę wziąć pod uwagę przy obliczaniu wielkości wiersza?
Dlaczego komunikat o błędzie zmienia się z 8126 na 65535, kiedy przechodzę od tworzenia tabel z kolumnami varchar (109) do kolumn varchar (110)?