Domanda

In quali casi useresti quale? C'è molta differenza? Quale in genere utilizzavo i motori di persistenza per conservare i booleani?

È stato utile?

Soluzione

Un TINYINT è un valore intero a 8 bit, un campo BIT può memorizzare tra 1 bit, BIT (1) e 64 bit, BIT (64). Per valori booleani, BIT (1) è piuttosto comune.

Altri suggerimenti

Da Panoramica dei tipi numerici ;

BIT [(M)]

  

Un tipo di campo bit. M indica il   numero di bit per valore, da 1 a   64. Il valore predefinito è 1 se M viene omesso.

     

Questo tipo di dati è stato aggiunto in MySQL   5.0.3 per MyISAM ed esteso in 5.0.5 a MEMORY, InnoDB, BDB e NDBCLUSTER. Prima della 5.0.3, BIT è a   sinonimo di TINYINT (1).

TINYINT [(M)] [UNSIGNED] [ZEROFILL]

  

Un numero intero molto piccolo. La gamma firmata   è compreso tra -128 e 127. L'intervallo senza segno è   Da 0 a 255.

Inoltre considera questo;

BOOL, BOOLEAN

  

Questi tipi sono sinonimi di   TINYINT (1). Un valore di zero è   considerato falso. I valori diversi da zero sono   considerato vero.

Tutte queste discussioni teoriche sono fantastiche, ma in realtà, almeno se stai usando MySQL e anche per SQL Server, è meglio attenersi a dati non binari per i tuoi booleani per la semplice ragione che è più facile lavorare con quando stai trasmettendo i dati, interrogando e così via. È particolarmente importante se stai cercando di raggiungere l'interoperabilità tra MySQL e SQLServer (ovvero sincronizzi i dati tra i due), perché la gestione del tipo di dati BIT è diversa nei due. Quindi in pratica avrai molte meno seccature se rimani con un tipo di dati numerico. Consiglierei a MySQL di rimanere con BOOL o BOOLEAN che viene memorizzato come TINYINT (1). Anche il modo in cui MySQL Workbench e MySQL Administrator visualizzano il tipo di dati BIT non è carino (è un piccolo simbolo per i dati binari). Quindi, sii pratico e risparmia i fastidi (e sfortunatamente parlo per esperienza).

BIT dovrebbe consentire solo 0 e 1 (e NULL, se il campo non è definito come NOT NULL). TINYINT (1) consente qualsiasi valore che può essere memorizzato in un singolo byte, -128..127 o 0..255 a seconda che sia o meno senza segno (il 1 mostra che si intende utilizzare solo una singola cifra, ma lo fa non ti impedisce di memorizzare un valore maggiore).

Per le versioni precedenti alla 5.0.3, BIT è interpretato come TINYINT (1), quindi non c'è nessuna differenza lì

BIT ha un " questo è un valore booleano " semantico e alcune app considereranno TINYINT (1) allo stesso modo (a causa del modo in cui MySQL lo trattava), quindi le app possono formattare la colonna come una casella di controllo se controllano il tipo e decidono un formato basato su quello.

Potrebbe essere sbagliato ma:

Tinyint è un numero intero compreso tra 0 e 255

bit è 1 o 0

Quindi per me un po 'è la scelta per i booleani

Dalla mia esperienza ti sto dicendo che BIT ha problemi sui tipi di sistemi operativi Linux (Ubuntu per esempio). Ho sviluppato il mio db su Windows e dopo aver distribuito tutto su Linux, ho avuto problemi con le query che sono state inserite o selezionate da tabelle con TIPO DI DATI BIT.

Bit non è sicuro per ora. Ho cambiato in tinyint (1) e ha funzionato perfettamente. Voglio dire che hai solo bisogno di un valore per differenziare se è 1 o 0 e tinyint (1) va bene per questo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top