Mysql
 sql >> Database >  >> RDS >> Mysql

Il miglior tipo di dati per memorizzare un numero lungo composto da 0 e 1

Quello che stai mostrando sono numeri binari

  • 0000000 =0
  • 0000001 =2^0 =1
  • 0000010 =2^1 =2
  • 0000011 =2^0 + 2^1 =3

Quindi memorizza semplicemente questi numeri in un tipo di dati intero (che viene memorizzato internamente con i bit come mostrato ovviamente). È possibile utilizzare BIGINT per questo, come consigliato nei documenti per le operazioni bit a bit (http://dev.mysql.com/doc/refman/5.7/en/bit-functions.html ).

Ecco come impostare il flag n:

UPDATE mytable
SET bitmask = POW(2, n-1)
WHERE id = 12345;

Ecco come aggiungere una bandiera:

UPDATE mytable
SET bitmask = bitmask | POW(2, n-1)
WHERE id = 12345;

Ecco come controllare un flag:

SELECT *
FROM mytable
WHERE bitmask & POW(2, n-1)

Ma come menzionato nei commenti:in un database relazionale di solito usi colonne e tabelle per mostrare attributi e relazioni piuttosto che un elenco di flag codificato.