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 utf8
wymaga 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ć BLOB
lub 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 utf8
kolumna może przechowywać „tylko” około pół miliona znaków (16M-1)/3 = 5,592,405
), ale nadal znacznie rozszerza twój zasięg.