sql >> Database >  >> RDS >> Mysql

Best practices voor bitvlaggen in PHP

In uw model , het object heeft 8 booleaanse eigenschappen. Dat impliceert 8 boolean (TINYINT voor MySQL) kolommen in uw databasetabel en 8 getter/setter-methoden in uw object. Eenvoudig en conventioneel.

Heroverweeg uw huidige aanpak. Stel je voor wat de volgende man die dit ding moet onderhouden zal zeggen.

CREATE TABLE mytable (myfield BIT(8));

Oké, het lijkt erop dat er hier wat binaire gegevens plaatsvinden.

INSERT INTO mytable VALUES (b'00101000');

Wacht, kan iemand me nog eens vertellen waar die enen en nullen voor staan.

SELECT * FROM mytable;
+------------+
| mybitfield |
+------------+
| (          | 
+------------+

Wat?

SELECT * FROM mytable WHERE myfield & b'00101000' = b'00100000';

WTF!? WTF!?

steekt zichzelf in het gezicht

-- ondertussen, in een alternatief universum waar feeën met eenhoorns spelen en programmeurs geen hekel hebben aan DBA's... --

SELECT * FROM mytable WHERE field3 = 1 AND field5 = 0;

Geluk en zonneschijn!



  1. Cursorgebaseerd recordgegevenstype met cursor die meerdere waarden retourneert in Oracle Database

  2. Hoe voorloopnullen van datums in Oracle te verwijderen

  3. Converteer SQL Server DateTime-object naar BIGINT (.Net ticks)

  4. Hoe werken PostgreSQL security_barrier views?