Autor Zpráva
Martin02
Profil
Ahoj,

znám jen základní datové typy, které používám (int, text, varchar, enum, datetime...). Hledal jsem teď na netu, do čeho uložit URL adresu a dočetl jsem se, že buď do VARCHAR(2083) nebo TEXT. Co mě zajímá je, proč zrovna 2083? Má to nějaký význam? Je nějaký zásadní rozdíl mezi tím, když třeba napíšu VARCHAR(100) a VARCHAR(101)?

A druhá věc, jaký se používá datový typ pro hodnoty ano/ne? Já vždy používal enum('0','1'), ale v phpmyadminu jsem teď viděl i nějaký typ BOOL - je lepší? Používá se víc?


Díky za odpovědi.
mimochodec
Profil
Martin02:
http://dev.mysql.com/doc/refman/5.0/en/char.html
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions.

Je nějaký zásadní rozdíl mezi tím, když třeba napíšu VARCHAR(100) a VARCHAR(101)?
Má to vliv na to, kolik se tam vejde znaků.

Já vždy používal enum('0','1'), ale v phpmyadminu jsem teď viděl i nějaký typ BOOL
Nevím, co si slibuješ od těch apostrofů. Pokud jde o hodnotu ano/ne, nepotřebuješ ani enum (dokonce z řetězců), ani číslo, stačí ten bool. V případě jednoho zápisu / čtení rozdíl nepoznáš, pokud to uděláš miliónkrát, předpokládám (a doufám), že mysql funguje natolik inteligentně, že úspora znatelná bude.
Kajman
Profil
Martin02:
Co mě zajímá je, proč zrovna 2083?

Protože delší adresy budou hodně uživatelům blbnout viz http://support.microsoft.com/kb/208427
juriad
Profil
U VARCHARu je to maximální délka řetězce v počtu znaků, který můžeš do daného sloupce uložit.
U TEXTu tento limit nelze zadat, vždy pojme až 65535 znaků.

BOOL je v MySQL nejmenší možné číslo, u kterého se 0 považuje za false a nenula za true.
ENUM se ve skutečnosti ukládá jako číslo a převod z textu a na text se provádí až při výpisu.
Ani prostorovými nároky se tyto dva typy neliší.

Na StackOverflow se rozebírají dva důvody:
1) BOOL umožní uložit jakékoli malé číslo, třeba 9. To enum neumožní, nutí tedy uložit jen buď '0', nebo '1'.
2) U BOOL můžeš použít konstrukci NOT paid místo dlouhého paid == '0'

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: