Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> CHAR(32) czy VARCHAR(32), ktory lepszy do zapamietania wyniku funkcji md5?
MySQL
post 2.04.2009, 11:29:36
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 4
Dołączył: 3.06.2008

Ostrzeżenie: (0%)
-----


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.


--------------------
Pozdrawiam serdecznie
Krzysiek
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
nospor
post 2.04.2009, 11:34:29
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
MySQL
post 2.04.2009, 11:48:39
Post #3





Grupa: Zarejestrowani
Postów: 71
Pomógł: 4
Dołączył: 3.06.2008

Ostrzeżenie: (0%)
-----


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?

Ten post edytował achaja 2.04.2009, 11:49:30


--------------------
Pozdrawiam serdecznie
Krzysiek
Go to the top of the page
+Quote Post
nospor
post 2.04.2009, 12:12:57
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 01:42