Chciałbym wiedzieć, jaki jest maksymalny rozmiar dla typu VARCHAR MySQL.
Czytałem, że maksymalny rozmiar jest ograniczony rozmiarem wiersza, który wynosi około 65 tys. Próbowałem ustawić pole na, varchar(20000)
ale mówi, że to jest zbyt duże.
Mógłbym to ustawić varchar(10000)
. Na ile dokładnie mogę to ustawić?
Odpowiedzi:
Pamiętaj, że MySQL ma maksymalny limit wielkości wiersza
Maksymalny rozmiar, jaki może zajmować pojedyncza kolumna, jest różny przed i po MySQL 5.0.3
Pamiętaj jednak, że limit jest niższy, jeśli używasz wielobajtowego zestawu znaków, takiego jak utf8 lub utf8mb4.
Użyj
TEXT
typów inorder, aby pokonać limit wielkości wiersza.Więcej informacji na temat typów BLOB i TEKSTOWYCH
Nawet więcej
Zamówienie więcej szczegółów na typ Przechowywanie danych Wymagania która zajmuje się wymagań magazynowych dla wszystkich typów danych.
źródło
Zgodnie z dokumentami online istnieje limit 64 KB wierszy i możesz ustalić rozmiar wiersza, używając:
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 znakutf8
(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
lubTEXT
. 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:
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.źródło
utf8mb4
MySQL .utf8mb4
to nazwa MySql tego, co reszta słowa nazywa utf8.Źródło
źródło
CHARACTER SET utf8
w przykładach. Powinno tak byćCHARACTER SET utf8mb4
(jeśli chcesz, aby cały tekst Unicode był poprawnie przechowywany ... a kto tego nie chce?)CHARSET=utf8mb4
użytkuVARCHAR(16383)
.Z dokumentacji MySQL:
Limity dla VARCHAR różnią się w zależności od użytego zestawu znaków. Użycie ASCII wymagałoby użycia 1 bajtu na znak. Oznacza to, że możesz przechowywać 65 535 znaków. Użycie utf8 spowoduje użycie 3 bajtów na znak, co spowoduje ograniczenie liczby znaków do 21 844. ALE jeśli używasz nowoczesnego zestawu znaków wielobajtowych utf8mb4, którego powinieneś użyć! Obsługuje emoji i inne znaki specjalne. Będzie używać 4 bajtów na znak. Ograniczy to liczbę znaków na tabelę do 16 383. Pamiętaj, że inne pola, takie jak INT, również zostaną policzone do tych limitów.
Wniosek:
utf8 maksymalnie 21 844 znaków
utf8mb4 maksymalnie 16 383 znaków
źródło
możesz także użyć MEDIUMBLOB / LONGBLOB lub MEDIUMTEXT / LONGTEXT
Typ BLOB w MySQL może przechowywać do 65 534 bajtów, jeśli spróbujesz zapisać więcej niż tyle danych, MySQL skróci dane. MEDIUMBLOB może przechowywać do 16 777 213 bajtów, a LONGBLOB może przechowywać do 4 294 967 292 bajtów.
źródło
Przed wersją Mysql 5.0.3 typ danych Varchar może przechowywać 255 znaków, ale od 5.0.3 może przechowywać 65 535 znaków.
ALE ma ograniczenie maksymalnej wielkości wiersza 65 535 bajtów. Oznacza to, że uwzględnienie wszystkich kolumn nie może przekraczać 65 535 bajtów.
W twoim przypadku może się zdarzyć, że gdy spróbujesz ustawić więcej niż 10000, przekroczy on więcej niż 65 535, a mysql wyświetli błąd.
Po więcej informacji: https://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html
blog z przykładem: http://goo.gl/Hli6G3
źródło
Możesz użyć
TEXT
typu , który nie jest ograniczony do 64 KB.źródło