Często widzisz pola bazy danych o wielkości 255 znaków. Jaki jest tradycyjny / historyczny powód, dla którego? Zakładam, że ma to związek z limitami stronicowania / pamięci i wydajnością, ale rozróżnienie między 255 a 256 zawsze mnie myliło.
varchar(255)
Biorąc pod uwagę, że jest to pojemność lub wielkość, a nie indeksator , dlaczego 255 jest preferowane zamiast 256? Czy bajt jest zarezerwowany do jakiegoś celu (terminator, null lub coś takiego)?
Prawdopodobnie varchar (0) jest nonsensem (ma zerową pojemność)? W którym przypadku 2 ^ 8 miejsca powinno z pewnością wynosić 256?
Czy istnieją inne wielkości, które zapewniają korzyści w zakresie wydajności? Na przykład czy varchar (512) jest mniej wydajny niż varchar (511) czy varchar (510)?
Czy ta wartość jest taka sama dla wszystkich baz danych relacji, starych i nowych?
zrzeczenie się odpowiedzialności - nie jestem programistą DBA, używam rozmiarów i typów pól, które pasują do mojej logiki biznesowej tam, gdzie jest to znane, ale chciałbym poznać historyczny powód tej preferencji, nawet jeśli nie jest to już istotne (ale nawet więcej, jeśli nadal jest to istotne).
Edytować:
Dzięki za odpowiedzi, wydaje się, że istnieje pewna koncensja, że bajt jest używany do przechowywania wielkości, ale to nie rozstrzyga ostatecznie sprawy w mojej głowie.
Jeśli metadane (długość łańcucha) są przechowywane w tej samej ciągłej pamięci / dysku, ma to sens. 1 bajt metadanych i 255 bajtów danych łańcuchowych bardzo dobrze do siebie pasowałoby i mieściłby się w 256 ciągłych bajtach pamięci, co prawdopodobnie jest czyste i uporządkowane.
Ale ... Jeśli metadane (długość ciągu) są przechowywane oddzielnie od rzeczywistych danych ciągu (być może w głównej tabeli), to aby ograniczyć długość danych ciągu przez jeden bajt, tylko dlatego, że łatwiej jest przechowywać tylko 1 bajtową liczbę całkowitą metadanych wydaje się nieco dziwny.
W obu przypadkach wydaje się to subtelnością, która prawdopodobnie zależy od implementacji DB. Praktyka używania 255 wydaje się dość rozpowszechniona, więc ktoś gdzieś musiał na początku argumentować za tym, czy ktoś może sobie przypomnieć, co to była / jest ta sprawa? Programiści nie przyjmą żadnej nowej praktyki bez powodu, a to kiedyś musiało być nowe.