Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: CHAR(32) czy VARCHAR(32)
Forum PHP.pl > Forum > Bazy danych > MySQL
MySQL
No wlasnie. Tak jak w temacie. Jest sobie funkcja php md5(), ktora zwraca zawsze (o ile nie poda sie drugiego opcjonalnego parametru) lancuch 32-znakowy. W wielu miejscach w Internecie przeczytalem ze zalecane jest zachowywac wyniku tej funkcji w bazie z polu typu CHAR(32) zamiast VARCHAR(32). Ale nie znalazlem wytlumaczenia takiego postepowania. I dlatego zadaje to pytanie.

Dlaczego wlasnie typ CHAR(32) mialby byc lepszy niz VARCHAR(32)? skoro:
po pierwsze - zarowno jeden jak i drugi mozna ograniczyc z gory;
do drugie - funkcja md5 ZAWSZE zwraca lancuch o stalej dlugosci.
nospor
char stosujesz wtedy, gdy pole zawsze bedzie mialo string o tej samej dlugosci. dla md5() tak wlasnie bedzie.
char jest szybsze od varchar.

jest jednak pewien haczyk:
jesli w tabeli zdefiniujesz jeszcze jakiekolwiek pole typu VARCHAR, to CHAR juz ci sie na nic nie zda, bo mysql automatycznie skonweruje je na VARCHAR smile.gif
MySQL
Ok dzieki. "jest szybszy". Tego wlasnie szukalem i nie znalazlem. Ale pozwol, ze podraze jeszcze ten temat (jak poznaje nowe rzeczy to nie wystarcza mi tylko pobiezny ich przeglad).

Czyli odnosnie tej konwersji. W mojej tabeli, w ktorej mialby byc zapisywany wynik funkcji skrotu w istocie mam jeszcze dwa pola typu VARCHAR. Czyli zgodnie z tym co napisales pole md5 zostanie przekonwertowane na VARCHAR. Ale czy bedzie to konwersja CHAR(32) -> VARCHAR(32) czy tez CHAR(32) -> VARCHAR(255)? Czyli czy przy takiej konwersji zachowuje sie gorne ograniczenie czy nie?
nospor
konwersja na varachar(32)

Skoro wiec bedziesz mial tam tez inne varchary, wiec i te md5 zrob od razu varchar. Poco mysql ma konwertowac skoro mozesz sam to okreslic winksmiley.jpg

edit:
Małe sprostowanie
To co ci powiedzialem dotyczylo mysql4 i wczesnej wersji mysql5:
http://dev.mysql.com/doc/refman/4.1/en/sil...mn-changes.html
Cytat
If any column in a table has a variable length, the entire row becomes variable-length as a result. Therefore, if a table contains any variable-length columns (VARCHAR, TEXT, or BLOB), all CHAR columns longer than three characters are changed to VARCHAR columns.


mysql5:
http://dev.mysql.com/doc/refman/5.0/en/sil...mn-changes.html
Cytat
Before MySQL 5.0.3, if any column in a table has a variable length, the entire row becomes variable-length as a result. Therefore, if a table contains any variable-length columns (VARCHAR, TEXT, or BLOB), all CHAR columns longer than three characters are changed to VARCHAR columns.


Przepraszam za małe niedopowiedzenie

wiec jesli masz mysql >= 5.0.3 to uzywaj char
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.