¿Qué tipo de columna es mejor usar en una base de datos MySQL para valores booleanos? Yo uso boolean
pero mi colega usa tinyint(1)
.Boolean vs tinyint (1) para valores booleanos en MySQL
Respuesta
Estos tipos de datos son sinónimos.
Sí - http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html –
No diría que los datos _types_ son sinónimos - tinyint (1) es lo mismo que bool , pero tinyint y bool no son lo mismo.Punto menor, pero tu respuesta me disparó la primera vez que lo leí –
Esto no responde la pregunta. Si bien es cierto que tinyint (1) es funcionalmente idéntico a bool, el OP preguntó qué es lo mejor para usar. La respuesta de @dj_segfault hace un trabajo adecuado para explicar por qué se debe preferir bool a tinyint (1) cuando se almacena un valor booleano. –
boolean
no es un tipo de datos distinto en MySQL; es solo un sinónimo de tinyint
. See this page in the MySQL manual.
Personalmente, sugiero usar tinyint como preferencia, porque boolean no hace lo que crees que hace desde el nombre, por lo que hace que el código sea potencialmente engañoso. Pero a nivel práctico, realmente no importa; ambos hacen lo mismo, por lo que no estás ganando ni perdiendo nada al usar cualquiera de los dos.
uso enumeración su fácil y más rápido el
no le recomiendo enumeración o tinyint (1) como bit (1) sólo necesita 1 bit para almacenar valor booleano mientras tinyint (1) necesita 8 bits.
ref
No podemos usar enum ya que nuestra base de datos también necesita compatibilidad con sqlite – tom
Si está utilizando InnoDB, bit termina usando tanto espacio como tinyint. De [Alto rendimiento MySQL] (http://www.amazon.com/High-Performance-MySQL-Optimization-Replication/dp/1449314287/) (los tipos percona) "InnoDB almacena [s] cada columna [bit] como el el entero más pequeño es lo suficientemente grande como para contener los bits, por lo que no se guarda ningún espacio de almacenamiento ". La única ganancia es si está almacenando múltiples valores booleanos en una columna BIT (morethan1). Entonces, si solo tiene un campo booleano, usar tinyint es lo mismo que bit en InnoDB, y es preferible ya que tinyint suele ser más fácil de usar. – billmalarky
voy a tomar un enfoque diferente aquí y sugieren que es tan importante para sus compañeros desarrolladores a entender el código como lo es para el compilador/base de datos. Usar boolean puede hacer lo mismo que usar tinyint, pero tiene la ventaja de transmitir semánticamente cuál es tu intención, y eso vale la pena.
Si usa una minúscula, no es obvio que los únicos valores que debe ver son 0 y 1. Un booleano SIEMPRE es verdadero o falso.
Mi experiencia al usar Dapper para conectarse a MySQL es que sí importa. He cambiado un poco anulable no (1) a un tinyint anulable (1) mediante la siguiente secuencia de comandos:
ALTER TABLE TableName MODIFY Setting BOOLEAN null;
Entonces Dapper comenzaron a arrojar excepciones. Traté de ver la diferencia antes y después del guión. Y notó que el bit (1) había cambiado a tinyint (1).
Entonces me encontré:
ALTER TABLE TableName CHANGE COLUMN Setting Setting BIT(1) NULL DEFAULT NULL;
que resolvió el problema.
Si bien es cierto que bool
y tinyint(1)
son funcionalmente idénticos, bool
debería ser la opción preferida, ya que lleva el significado semántico de lo que estás tratando de hacer. Además, muchos ORM convertirán bool
en el tipo booleano nativo de su lenguaje de programación.
- 1. TINYINT vs ENUM (0, 1) para valores booleanos en MySQL
- 2. ¿Por qué MySQL interpreta Boolean como TINYINT (1) en lugar de BIT (1)?
- 3. Para tratar con valores 'booleanos' en PHP y MySQL
- 4. Confusión BOOLEAN o TINYINT
- 5. MySQL Booleano "tinyint (1)" tiene valores de hasta 127?
- 6. Hibernate JPA, MySQL y TinyInt (1) para booleana en lugar de bits o carbón
- 7. Rails 3 migrations: boolean (mysql vs postgreSQL)
- 8. "is not null" vs boolean MySQL - Rendimiento
- 9. BOOL y tinyint (1) ... ¿sin firmar?
- 10. ¿Cómo puedo actualizar los valores booleanos en mysql?
- 11. Almacenar valores booleanos en SQL?
- 12. mysql Tinyint como no firmado
- 13. Rieles de base de datos valores booleanos
- 14. GSON Serialize boolean a 0 ó 1
- 15. valores insertar en campos booleanos Solr
- 16. evaluar los valores booleanos en Java
- 17. JAXBElement <Boolean> vs boolean
- 18. Diferencias en operadores booleanos: & vs && y | vs ||
- 19. valores booleanos Objective C
- 20. Usando enum vs Boolean?
- 21. BOOL vs Boolean
- 22. Boolean volátil vs AtomicBoolean
- 23. JSON values 1 o 0 - int o boolean
- 24. java: bucle en los dos valores booleanos (falso, verdadero)
- 25. mysql velocidad mysql_num_rows vs consulta límite 1
- 26. ¿Cuál es la mejor implementación para boolean en MySQL usando Java para conectarse a la base de datos?
- 27. unsigned tinyint en php?
- 28. ¿Están definidos los valores booleanos negativos?
- 29. ¿Qué es más rápido: char (1) o tinyint (1)? ¿Por qué?
- 30. ¿Existe alguna diferencia en el uso de INT (1) frente a TININT (1) en MySQL?
Parece que MySQL trata de forma transparente 'boolean' como' tinyint (1) '. Entonces puedes usar 'boolean',' true' y 'false' y MySQL los trata como' tinyint (1) ',' 1' y '0'. – ADTC
Otro caso es Char 1 con Y & N, que se supone que es más rápido para algunas personas. – Zon