Zgodnie z dokumentami online istnieje limit 64 KB wierszy i możesz ustalić rozmiar wiersza, używając:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
Należy pamiętać, że długości kolumn nie są odwzorowaniem ich wielkości jeden na jeden. Na przykład CHAR(10) CHARACTER SET utf8wymaga trzech bajtów na każdy z dziesięciu znaków, ponieważ to konkretne kodowanie musi uwzględniać właściwość trzech bajtów na znak utf8(to kodowanie MySQLutf8 zamiast „prawdziwego” UTF-8, które może mieć do czterech bajtów ).
Ale jeśli rozmiar wiersza zbliża się do 64 KB, warto sprawdzić schemat bazy danych. Jest to rzadka tabela, która musi być tak szeroka w prawidłowo skonfigurowanej bazie danych (3NF) - jest to możliwe, po prostu niezbyt częste.
Jeśli chcesz użyć więcej, możesz użyć BLOBlub TEXT. Nie liczą się one do limitu 64 KB wiersza (innego niż mały ślad administracyjny), ale musisz zdawać sobie sprawę z innych problemów, które wynikają z ich użycia, takich jak niemożność sortowania przy użyciu całego bloku tekstu poza określoną liczbą znaków (chociaż można to ustawić w górę), zmuszając tabele tymczasowe do umieszczenia na dysku zamiast w pamięci lub konieczności skonfigurowania buforów komunikacyjnych klienta i serwera, aby efektywnie obsługiwać rozmiary.
Dopuszczalne rozmiary to:
TINYTEXT 255 (+1 byte overhead)
TEXT 64K - 1 (+2 bytes overhead)
MEDIUMTEXT 16M - 1 (+3 bytes overhead)
LONGTEXT 4G - 1 (+4 bytes overhead)
Nadal masz niedopasowanie bajtów / znaków (dzięki czemu MEDIUMTEXT utf8kolumna może przechowywać „tylko” około pół miliona znaków (16M-1)/3 = 5,592,405), ale nadal znacznie rozszerza twój zasięg.