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

Bedste datatype til at gemme et langt tal lavet af 0 og 1

Det du viser er binære tal

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

Så gem blot disse tal i en heltal datatype (som er internt lagret med bits som vist selvfølgelig). Du kan bruge BIGINT til dette, som anbefalet i dokumenterne til bitvise operationer (http://dev.mysql.com/doc/refman/5.7/en/bit-functions.html ).

Sådan indstilles flag n:

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

Sådan tilføjer du et flag:

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

Sådan kontrollerer du et flag:

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

Men som nævnt i kommentarerne:I en relationsdatabase bruger du normalt kolonner og tabeller til at vise attributter og relationer i stedet for en kodet flagliste.



  1. MySQL SELECT id for række, hvor STØRSTE af MAX indgange i flere kolonner

  2. Ulovlig blanding af sammenstillinger (utf8_unicode_ci,IMPLICIT) og (utf8_general_ci,IMPLICIT) for operation '='

  3. Sådan lytter du til nye db-plader via java

  4. MySQL Hvordan vælger man data fra tabel, som er optaget i dag?