Autor Zpráva
hugo123
Profil *
Ahojte,

viete mi prosim poradit, ako je najlepsie volit dlzku varchar v Mysql?

Niekde som pocul, ze najlepsie je volit dlzku 2^n a niekde zase ze 2^n-1, viete mi prosim poradit, co je najlepsie?

Vopred dakujem velmi pekne.
Radek9
Profil
hugo123:
Délku nastav podle toho, kolik znaků tam půjde. Na to není žádné univerzální pravidlo.
Joker
Profil
hugo123:
ako je najlepsie volit dlzku varchar v Mysql?
Aby se tam vešla ukládaná data.

Napadá mě jediná situace, kdy je nějaký rozdíl v délce VARCHAR: Pokud maximální možná délka řetězce nepřesáhne 255 bajtů, je „režie“ 1 bajt pro každou hodnotu, jinak 2 bajty.
Takže v situaci, kdy to zrovna vychází na hranici a je jedno, jestli povolíte o pár znaků víc nebo méně, může být výhodnější volit hodnotu, která se do těch 255 bajtů vejde.

Ale pozor na to, že ta hodnota VARCHAR(x) udává počet znaků a ne bajtů, takže v závislosti na kódování to mohou být různá čísla. Konkrétně pokud sloupec má kódování utf8, může jeden znak zabírat až tři bajty, takže do 255 bajtů se pak vejde maximálně VARCHAR(85).
nemeja
Profil
nehledě na to, že varchar má tu výhodu, že zabírá pouze tolik místa, kolik pro danou hodnotu potřebuje. Ne jako char, který zabírá zadanou délku i když to neni potřeba.
Joker
Profil
nemeja:
varchar má tu výhodu, že zabírá pouze tolik místa, kolik pro danou hodnotu potřebuje
Plus ten 1-2 bajty režie.
Takže bude-li vždycky nebo skoro vždycky využita plná délka sloupce, je lepší CHAR.
Např. na kód jazyka (ISO 639-1) bude lepší CHAR(2) než VARCHAR(2), na MD5 hash CHAR(32) než VARCHAR(32) a podobně.

Kromě toho když tabulka bude typu MySQL MyISAM a nebude obsahovat žádný VARCHAR, TEXT ani BLOB, bude to statická tabulka a práce s ní bude rychlejší.
Tori
Profil
nemeja:
Někde jsem četla, že ale na druhou stranu pokud má tabulka všechny sloupce o pevné šířce, tak je trochu rychlejší (asi hlavně vyhledávání n-tého řádku).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: