VARCHAR(255)
może przechowywać do 255 znaków, niezależnie od liczby bajtów na znak wymaganej przez kodowanie zestawu znaków.
Wymóg przechowywania to długość faktycznie przechowywanych danych (nie maksymalna) plus 1 lub 2 bajty do przechowywania długości danych -- 1 bajt jest używany, chyba że maksymalna możliwa długość w bajtach> 255... więc VARCHAR(255) COLLATE utf8mb4
używa 2 bajtów do przechowywania długości, podczas gdy VARCHAR(255) COLLATE ascii_general_ci
wykorzystuje 1 bajt do przechowywania długości. Każda kolumna może przechowywać nie więcej niż 255 znaków.
Zadeklaruj rozmiar kolumny odpowiedni dla przechowywanych danych. Używanie 255 jest powszechne, ale zwykle jest to czerwona flaga niechlujnego projektu, ponieważ rzadko kiedy ta konkretna wartość w znaczący sposób reprezentuje maksymalną odpowiednią długość kolumny.
Natomiast CHAR(255) COLLATE utf8mb4
zawsze zużywa 255 × 4 (maksymalnie możliwe) bajty na kolumnę na wiersz i 0 bajtów do przechowywania długości, ponieważ przechowywana długość nie zmienia się. Te kolumny rzadko są odpowiednie, z wyjątkiem sytuacji, gdy kolumna ma zawsze znaną długość, a zestaw znaków jest jednobajtowy, na przykład UUID, który byłby CHAR(36) COLLATE ascii_general_ci
.
https:// /dev.mysql.com/doc/refman/5.7/en/storage-requirements.html#data-types-storage-reqs-strings