sql >> Base de Datos >  >> RDS >> Mysql

Mejores prácticas para banderas de bits en PHP

En tu modelo , el objeto tiene 8 propiedades booleanas. Eso implica 8 columnas booleanas (TINYINT para MySQL) en la tabla de su base de datos y 8 métodos getter/setter en su objeto. Simple y convencional.

Reconsidere su enfoque actual. Imagínese lo que dirá el próximo tipo que tenga que mantener esta cosa.

CREATE TABLE mytable (myfield BIT(8));

OK, parece que vamos a tener algunos datos binarios sucediendo aquí.

INSERT INTO mytable VALUES (b'00101000');

Espera, que alguien me diga otra vez qué significa cada uno de esos 1 y 0.

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

¿Qué?

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

¿¡Qué diablos!? ¿¡Qué diablos!?

se apuñala en la cara

-- mientras tanto, en un universo alternativo donde las hadas juegan con unicornios y los programadores no odian a los administradores de bases de datos... --

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

¡Felicidad y sol!