it-swarm-eu.dev

Jaká je výhoda používání BOOLEAN oproti TINYINT (1)?

Z manuálu MySQL se uvádí:

BOOL, BOOLEAN

Tyto typy jsou synonyma pro TINYINT (1). Hodnota nula se považuje za nepravdivou. Nenulové hodnoty jsou považovány za pravdivé:

Vytvořil jsem sloupec BOOLEAN s 0 jako výchozí hodnota. Pak aktualizuji hodnotu na 2. Logicky bych očekával, že MySQL přijme buď 0 nebo 1 protože je to booleovský. MySQL však nevydala chybu ani nezabránila provedení aktualizace.

Pokud BOOLEAN pracuje úplně stejně jako TINYINT (1), je rozdíl, zda používám TINYINT (1) nebo BOOLEAN?

16

Tyto dva jsou opravdu synonyma, takže je můžete používat zaměnitelně. Uvidíte žádný rozdíl mezi nimi.

Pokud chcete povolit pouze 0 a 1, můžete stále používat typ bit.

12
dezso

Pokud pracujete s jinými lidmi (nebo si chcete připomenout), můžete použít datový typ BOOLEAN, abyste naznačili, že data jsou určena pouze pro hodnotu 1 nebo 0.

2
Cato Minor

Zdá se mi, že skutečně existuje rozdíl.

V tabulce, kterou používám, mám sloupec definovaný jako droboun s indexem ve sloupci. Když vyvolám následující dotaz „vysvětlit výběr * z tabulky, kde je sloupec pravdivý“, znamená to, že bude číst všechny řádky v tabulce (sloupce „možný_keys“ a „ref“ jsou nulové i přes sloupec „klíč“ zobrazující index).

Změnou dotazu na „vysvětlit výběr * z tabulky, kde sloupec = 1“ se index zapíše správně, přičemž „možným klíčům“ a „ref“ sloupcům jsou přiřazeny hodnoty a „řádky“ jsou nastaveny na mnohem nižší číslo.

Také jsem se pokusil nahradit „true“ za „false“ a 1 za 0 a získat srovnatelné výsledky.

Když jsem to udělal o krok dále, přešel jsem z maličkosti na int a nezměnil to žádný rozdíl.

0
user77843