Autor | Zpráva | ||
---|---|---|---|
Martin02 Profil |
#1 · Zasláno: 18. 9. 2014, 13:57:51
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 |
#2 · Zasláno: 18. 9. 2014, 14:26:54
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 |
#3 · Zasláno: 18. 9. 2014, 14:30:12
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 |
#4 · Zasláno: 18. 9. 2014, 14:43:57
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'
|
||
Časová prodleva: 10 let
|
0