Respuesta
BOOLEAN es un alias para TINYINT (1) y se almacena como un byte de datos.
ENUM ('y', 'n') también se almacena como 1 byte de datos.
Por lo tanto, desde el punto de vista del tamaño de almacenamiento, ninguno es mejor.
Sin embargo, puede almacenar 9 en un campo BOOLEAN y lo aceptará. Entonces, si quieres forzar dos estados solamente, ve por ENUM.
Realmente no tiene sentido usar un 'Enum'. 'TinyInt' es mejor que cualquiera' Boolean' o 'Enum' cuando todo lo que quieres es verdadero/falso. – IAbstract
Como mencioné, puede almacenar fácilmente 9 en un campo BOOLEAN. Dicho esto, 9 se evalúa como VERDADERO en un buen número de idiomas, pero no en MySQL (donde TRUE es simplemente un alias para 1) –
TINYINT(1)
- parece un booleano, hazlo uno.
Nunca compares internamente con cosas como y
cuando hay un booleano (0/1) disponible.
Dependiendo del idioma que utilice para interactuar con la base de datos, puede encontrar problemas de mayúsculas y minúsculas utilizando enum, por ejemplo, si su base de datos usa una 'y' minúscula pero su código espera una 'Y' mayúscula. Un bool/tinyint siempre será 0 o 1 (o NULL) por lo que evita este problema.
Esto es incorrecto. Un 'BOOL',' BOOLEAN' o 'TINYINT' puede contener valores distintos de' 0', '1' o' NULL'. Un 'TINYINT (1)' es un * byte *, no un bit. Puede almacenar valores de -127 a 127 (o de 0 a 255 si no está firmado). – Nate
Aquí está el problema con el almacenamiento de valores booleanos como una enumeración:
SELECT count(*) FROM people WHERE is_active = true;
# => Devuelve 0 porque la verdadera = 'verdadero'
que induzca a error porque:
SELECT count(*) FROM people WHERE is_active = 'true';
# => Devoluciones 10
Si está escribiendo todas sus propias consultas SQL, entonces sabrá que no debe pasar una expresión a su consulta, pero si está utilizando un ORM, se encontrará con problemas desde un ORM será tipi Convierte la expresión en algo que la base de datos que consulta puede entender ('t'/'f' para SQLite; 0/1 para MySQL etc.)
En resumen, mientras que uno no puede ser más rápido que el otro en el nivel de bytes, los booleanos se deben almacenar como expresiones para que puedan compararse con otras expresiones.
Al menos, así es como yo lo veo.
Ninguno es mejor para almacenar un solo bit (o booleano). La enumeración tiene una tabla de búsqueda y almacena la respuesta como un entero. El booleano es en realidad solo un alias para "TINYINT (1)" que es técnicamente 8 bits de información. El tipo de datos bit solo almacenará tantos bits como en su definición (como en el tipo varchar), por lo que un bit (1) literalmente solo almacenará un bit. Sin embargo, si solo tiene uno de estos campos, entonces la pregunta es discutible, ya que nada rellenará los bits restantes, por lo que serán espacio no utilizado en cada fila (cantidad de espacio que cada fila se redondea al menos hasta un byte, típicamente 8 bits, por fila).
Como es un número entero, con los valores 0 y 1, también se puede usar en comparaciones, lo que equivale a falso y verdadero – SEoF
Una gran cantidad de consejos por defecto es utilizar BOOL
/TINYINT(1)
, pero como se indica en la respuesta a esta https://stackoverflow.com/a/4180982/2045006 permiten variaciones de 9 TRUE
.
En muchos casos esto no importa, pero si su columna formará parte de un índice único, entonces esto se convertirá en un gran problema.
En el caso de que use la columna en un índice único, le recomendaría usar BIT(1)
.
ENUM
también funcionaría bien con un índice único (siempre que tenga un conjunto de modos SQL adecuado). Sin embargo, usaría ENUM solo cuando quiera trabajar con representaciones de cadena de verdadero/falso en lugar de valores booleanos reales.
- 1. ¿Debo devolver bool o const bool?
- 2. Mysql Seleccionar Enum
- 3. DataStateBehavior para Enum en lugar de bool? ¿Cuerda?
- 4. MySQL enum con hibernación
- 5. MySQL Enum uso correcto?
- 6. .NET: bool vs enum como un parámetro de método
- 7. Java enum a mysql enum en la declaración preparada
- 8. MySQL Enum ¿ventaja de rendimiento?
- 9. #define o enum?
- 10. NÚMERO: Mysql que convierte Enum a Int
- 11. ¿Cuál es la diferencia entre boolean y bool en MySQL?
- 12. C# Enum o constantes int
- 13. herencia enum, o algo similar
- 14. subconjunto o subgrupo Enum en C#
- 15. C# "O" evento delegados que devuelven bool
- 16. tipo MySQL ENUM vs unir tablas
- 17. Casting Y o N to bool C#
- 18. Cómo convertir int o bool a checkState
- 19. Objetivo-C: BOOL vs bool
- 20. en C# ¿Qué significa 'bool = bool! = True'?
- 21. TINYINT vs ENUM (0, 1) para valores booleanos en MySQL
- 22. ¿Enum enum en JNI?
- 23. ¿Usa una tabla para proporcionar valores enum en MySQL?
- 24. MySQL Enum siempre contiene '' (cadena vacía) en posibilidades
- 25. Enum datatype versus tabla de datos en MySQL?
- 26. f Demostrando (f bool) = bool
- 27. moldeada bool anulable a bool
- 28. ¿Devuelve enum en lugar de bool de la función para mayor claridad?
- 29. Lista de valores de Enum en menú desplegable php mysql
- 30. ¿Cuándo deberían usarse BOOL y bool en C++?
Definir 'mejor'? –