sql >> Databasteknik >  >> RDS >> Mysql

Bästa datatypen för att lagra ett långt nummer bestående av 0 och 1

Det du visar är binära tal

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

Så helt enkelt lagra dessa siffror i en heltalsdatatyp (som är internt lagrad med bitar som naturligtvis visas). Du kan använda BIGINT för detta, som rekommenderas i dokumenten för bitvisa operationer (http://dev.mysql.com/doc/refman/5.7/en/bit-functions.html ).

Så här ställer du in flagga n:

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

Så här lägger du till en flagga:

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

Så här kontrollerar du en flagga:

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

Men som nämnts i kommentarerna:I en relationsdatabas använder du vanligtvis kolumner och tabeller för att visa attribut och relationer snarare än en kodad flagglista.



  1. Hur man hanterar undantag medan du lägger till dubblett av användarnamn till en databas i våren mvc-applikation

  2. Sortera ett underträd i en hierarkisk datastruktur för stängningstabellen

  3. Många-till-många relation välj och beställ efter

  4. Hur Asind() fungerar i PostgreSQL