Colonne bit vs. booleane


12

Dato che i campi di bit sono solo rappresentazioni binarie di dati e devono essere interrogati in modo leggermente "strano".

In realtà fornisce qualche vantaggio utilizzando un campo bit per un valore booleano? Da quello che posso vedere sembra suggerire che lo spazio sia l'unico vero vantaggio.

Risposte:


14

Personalmente, BOOLEANuserei il valore booleano. Ma tieni presente l'avvertenza che in MySQL BOOLEANè solo un sinonimo di TINYINT(1) [src] .

Questo, ovviamente, significa che puoi avere valori diversi da 0 o 1 se non stai attento. Per evitare ciò, è possibile utilizzare gli alias TRUEe FALSEquando si inseriscono e si aggiornano i dati, come quelli mappati rispettivamente a 1 e 0.

Per motivi di completezza, prima della 5.0.3, BITera anche sinonimo di TINYINT(1).


1

Se lo capisco correttamente, BOOLEAN utilizza sempre 1 byte per colonna, ma BIT (n) utilizzerà il numero di byte necessari per contenere il numero di bit specificato.

Quindi BIT può risparmiare un po 'di spazio, ma BOOLEAN è più facile da lavorare se è necessario interrogarli con SQL.

Se avessi una serie di flag che sono stati compresi da un'applicazione e memorizzati in un singolo campo nell'applicazione, allora avrei cercato di usare BIT (n). Tuttavia, se avessi colonne che dovevano essere interrogate da SQL, avrei usato BOOLEAN.

Un esempio potrebbe essere un'applicazione che utilizzava flag per registrare in quali settimane dovrebbe essere eseguito un evento, con un bit a settimana, pari a 1 se l'evento viene eseguito in una determinata settimana. Se i dati fossero facili da interrogare in un database, sarebbero "normalizzati" su due tabelle, ma se i dati dovevano essere archiviati solo nel database, è meglio conservarli nella forma in cui l'applicazione li utilizza nel.

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.