Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [myslq] TEXT a VARCHAR - czy dobrze rozumiem, że ....?
Forum PHP.pl > Forum > Przedszkole
konrados
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
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
Dzięki! Ale w takim razie czym się różni VARCHAR od TEXT?
Grzyw
http://forum.php.pl/index.php?showtopic=7520

Idąc na skróty. smile.gif

Jeżeli dobrze kojarzę, VARCHAR przyjmuje max. 255 znaków. TEXT tego ograniczenia nie ma.
konrados
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ć ? smile.gif
webdice
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ć ? smile.gif


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
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

sekret.gif 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
Cytat(phpion @ 29.01.2008, 14:16:56 ) *
sekret.gif 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 smile.gif. Dodam że char zajmuje zawsze tyle miejsca ile zadeklarowaliśmy, a varchar tyle ile jest konieczne do zapisania tekstu, może autorowi się przyda.
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.