Quali sono i vantaggi dell'utilizzo di BOOLEAN su TINYINT (1)?


16

Dal manuale di MySQL, dice:

BOOL, BOOLEAN

Questi tipi sono sinonimi di TINYINT (1). Un valore pari a zero è considerato falso. I valori diversi da zero sono considerati veri:

Ho creato una colonna BOOLEAN con 0come valore predefinito. Quindi aggiorno il valore a 2. Logicamente, mi aspetterei che MySQL accetti uno 0o l'altro 1poiché è un valore booleano. Tuttavia, MySQL non ha emesso alcun errore o mi ha impedito di eseguire l'aggiornamento.

Se BOOLEAN funziona esattamente come TINYINT (1), fa differenza se uso TINYINT (1) o BOOLEAN?

Risposte:


11

Quei due sono davvero sinonimi, quindi puoi usarli in modo intercambiabile. Non vedrai alcuna differenza tra loro.

Se si desidera consentire solo 0 e 1, è comunque possibile utilizzare il bittipo.


1
@QuestionOverflow Tieni presente che BITè davvero un campo di bit che contiene da uno a sessantaquattro bit in modo compatto.
David Harkness,

2

Se lavori con altre persone (o vuoi ricordare a te stesso), puoi utilizzare il tipo di dati BOOLEANper suggerire che i dati sono intesi ad assumere solo un valore di 1 o 0.


0

Mi sembra che ci sia davvero una differenza.

In una tabella che sto usando ho una colonna definita come un tinyint con un indice sulla colonna. Quando invoco la seguente query "spiega select * dalla tabella in cui la colonna è vera" indica che leggerà tutte le righe della tabella (le colonne "possible_keys" e "ref" sono nulle nonostante la colonna "chiave" che mostra il indice).

Cambiando la query in "spiega seleziona * dalla tabella dove colonna = 1" l'indice entra in funzione correttamente, con "possibili chiavi" e colonne "ref" assegnate valori e "righe" impostati su un numero molto più basso.

Ho anche provato a sostituire "vero" con "falso" e 1 con uno 0 e ho ottenuto risultati comparabili.

Facendo un ulteriore passo, sono passato da un minuscolo a un int e non ha fatto alcuna differenza.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.