konrados
29.01.2008, 13:17:05
Witam,
Czy dobrze rozumiem, że jeśli w mojej bazie mam pole VARCHAR o długości 200, to nawet jak dodam puste dane, to dany row i tak zajmie mi te 200 bajtów długości? Czyli 10 rows, gdzie są różne pola i dane, ale akurat to pole VARCHAR jest puste lub dodałem tam tylko parę bajtów, zajmie mi 2 KB na dysku na serwerze?
Jeśli tak jest to po co to w ogóle używać, nie lepiej używać TEXT bez określania długośći? Czy może chodzi o szybkość wydobywania danych? Jak rozumiem, puste dane typu TEXT zajmą co najwyżej 1 bajt (NULL) ?
Grzyw
29.01.2008, 13:21:09
Nie, pole VARCHAR na szczęście "działa" inaczej.
Zajmuje w bazie długość stringa + 1 bajt.
Czyli "pupa" zajmie 5 bajtów, "cokolwiek" zajmie 10 bajtów.
Varchar nie sprawdza się, gdy jest ustalona liczba znaków. Wówczas stosuje się typ char.
Dlatego, że wówczas każde pole zajmuje o 1 bajt więcej.
Ten jeden bajt jest potrzebny bazie na oznaczenie końca "wpisu"
konrados
29.01.2008, 13:28:37
Dzięki! Ale w takim razie czym się różni VARCHAR od TEXT?
Grzyw
29.01.2008, 13:39:29
http://forum.php.pl/index.php?showtopic=7520Idąc na skróty.

Jeżeli dobrze kojarzę, VARCHAR przyjmuje max. 255 znaków. TEXT tego ograniczenia nie ma.
konrados
29.01.2008, 13:42:26
Dzięki. Prócz tego znalazłem jeszcze
http://forums.mysql.com/read.php?20,75451 i wychodzi na to, że najlepiej używać TEXT. Usuwanie spacji w VARCHAR na początku i końcu mnie trochę zaskoczyło, ten mysql nie ma co robić ?
webdice
29.01.2008, 13:50:43
Cytat(konrados @ 29.01.2008, 13:42:26 )

Dzięki. Prócz tego znalazłem jeszcze
http://forums.mysql.com/read.php?20,75451 i wychodzi na to, że najlepiej używać TEXT. Usuwanie spacji w VARCHAR na początku i końcu mnie trochę zaskoczyło, ten mysql nie ma co robić ?

Właśnie nie, jeśli wiesz że pole będzie zajmować np 40 znaków (przypuśćmy hash sha1) to używaj varchar (40) a nie text. To samo jeśli masz w polu imie, nazwisko, e-mial to też nie używa się pola text, tylko varchar bo te dane mają jakieś ograniczenia. Chodzi o optymalizacje bazy.
phpion
29.01.2008, 14:16:56
Cytat(webdicepl @ 29.01.2008, 15:50:43 )

jeśli wiesz że pole będzie zajmować np 40 znaków (przypuśćmy hash sha1) to używaj varchar (40) a nie text

tu bym się nie zgodził. Jeśli długość tekstu jest stała to lepiej używać pola o stałej długości czyli char(40).
webdice
29.01.2008, 14:26:16
Cytat(phpion @ 29.01.2008, 14:16:56 )


tu bym się nie zgodził. Jeśli długość tekstu jest stała to lepiej używać pola o stałej długości czyli char(40).
Tu masz racje

. Dodam że char zajmuje zawsze tyle miejsca ile zadeklarowaliśmy, a varchar tyle ile jest konieczne do zapisania tekstu, może autorowi się przyda.