Według dokumentów MySQL istnieją cztery typy TEKSTÓW:
- TINYTEXT
- TEKST
- MEDIUMTEXT
- LONGTEXT
Jaka jest maksymalna długość, którą mogę zapisać w kolumnie każdego typu danych, zakładając, że kodowanie znaków to UTF-8?
Według dokumentów MySQL istnieją cztery typy TEKSTÓW:
Jaka jest maksymalna długość, którą mogę zapisać w kolumnie każdego typu danych, zakładając, że kodowanie znaków to UTF-8?
Odpowiedzi:
Z dokumentacji :
Wpisz | Maksymalna długość ----------- + ------------------------------------- TINYTEXT | 255 (2 8 -1) bajtów TEKST | 65,535 (2 16 1) bajtów = 64 KiB ŚREDNIOTekst | 16777215 (2 24 1) bajtów = 16 MiB LONGTEXT | 4294967295 (2 32 -1) = 4 bajty GiB
Pamiętaj, że liczba znaków, które można zapisać w kolumnie, będzie zależeć od kodowania znaków .
A TEXT column with a maximum length of 255 (28 – 1) characters. The effective maximum length is less if the value contains multi-byte characters.
więcej szczegółów można znaleźć w odpowiedzi Ankana.
Rozszerzenie tej samej odpowiedzi
TO SZABLONY TABELA SZACUNKOWA DO SZYBKICH DECYZJI!
xx
Type | A= worst case (x/3) | B = best case (x) | words estimate (A/4.5) - (B/4.5)
-----------+---------------------------------------------------------------------------
TINYTEXT | 85 | 255 | 18 - 56
TEXT | 21,845 | 65,535 | 4,854.44 - 14,563.33
MEDIUMTEXT | 5,592,415 | 16,777,215 | 1,242,758.8 - 3,728,270
LONGTEXT | 1,431,655,765 | 4,294,967,295 | 318,145,725.5 - 954,437,176.6
Proszę również odnieść się do odpowiedzi Chrisa V.: https://stackoverflow.com/a/35785869/1881812
TINYTEXT
liczy 1 bajt + 8 bajtów w stosunku do wielkości rekordu, podczas gdy VARCHAR(255)
od 1 bajtu + 255 bajtów do 2 bajtów + 1020 bajtów (4 bajty UTF-8 znaków) w stosunku do wielkości rekordu.
Przechodząc do wyzwania @ Ankan-Zerob, oto moja ocena maksymalnej długości, jaką można zapisać w każdym typie tekstu mierzonej słowami :
Type | Bytes | English words | Multi-byte words
-----------+---------------+---------------+-----------------
TINYTEXT | 255 | ±44 | ±23
TEXT | 65,535 | ±11,000 | ±5,900
MEDIUMTEXT | 16,777,215 | ±2,800,000 | ±1,500,000
LONGTEXT | 4,294,967,295 | ±740,000,000 | ±380,000,000
W języku angielskim 4,8 liter na słowo jest prawdopodobnie dobrą średnią (np. Norvig.com/mayzner.html ), chociaż długości słów będą się różnić w zależności od dziedziny (np. Język mówiony vs. artykuły naukowe), więc nie ma sensu być zbyt precyzyjnym. Angielski to w większości jednobajtowe znaki ASCII, z bardzo sporadycznymi wielobajtowymi znakami, tak zbliżonymi do jednego bajtu na literę. Dodatkowy znak musi być dozwolony dla spacji między słowami, więc zaokrągliłem w dół z 5,8 bajtów na słowo. Języki z dużą ilością akcentów, takie jak np. Polski, przechowują nieco mniej słów, podobnie jak np. Niemiecki z dłuższymi słowami.
Języki wymagające znaków wielobajtowych, takie jak grecki, arabski, hebrajski, hindi, tajski itp., Zazwyczaj wymagają dwóch bajtów na znak w UTF-8. Szaleńczo zgadując przy 5 literach na słowo, zaokrągliłem w dół z 11 bajtów na słowo.
Skrypty CJK (Hanzi, Kanji, Hiragana, Katakana itp.) Nic nie wiem; Uważam, że znaki w UTF-8 wymagają w większości 3 bajtów i (z ogromnym uproszczeniem) można by rozważyć użycie około 2 znaków na słowo, więc byłyby gdzieś pomiędzy pozostałymi dwoma. (Skrypty CJK prawdopodobnie wymagają mniej pamięci przy użyciu UTF-16).
To oczywiście ignoruje koszty ogólne związane z przechowywaniem itp.