change cambia mysql boolean tinyint

cambia - MySQL Boolean "tinyint(1)" tiene valores de hasta 127?



tinyint mysql (4)

Quería hacer un campo verdadero / falso para si un artículo está en stock.

Quería establecerlo en Boolean (que se convierte en tinyint(1) ), 1 para stock, 0 para stock.

Recibo feeds de proveedores, así que pensé: "¿Y si pasan cuántos son insumos?"

Entonces me pregunté si insertaba un número mayor a 1 lo que sucedería. Supuse que sería por defecto a 1.

Para mi sorpresa, me permitirá mantener cualquier número hasta 127, cualquier valor predeterminado será 127.

¿Alguien puede explicar por qué?


El tipo de datos TINYINT firmado puede almacenar valores enteros entre -128 y 127.

Sin embargo, TINYINT(1) no cambia el valor mínimo o máximo que puede almacenar. Simplemente indica que se muestre solo un dígito cuando los valores de ese tipo se imprimen como salida.


El tipo de datos tinyint utiliza 1 byte de almacenamiento. Se pueden almacenar 256 valores enteros posibles usando 1 byte (-128 a 127). si define como tinyint unsigned , los valores negativos se descartan, por lo que es posible almacenarlos (de 0 a 255).


Vea here cómo MySQL maneja esto. Si usa MySQL> 5.0.5, puede usar BIT como tipo de datos (en versiones anteriores, BIT se interpretará como TINYINT(1) . Sin embargo, la parte (1) es solo el ancho de la pantalla, no la longitud interna.


CREATE TABLE foo_test( col_1 TINYINT , col_2 TINYINT(2) , col_3 TINYINT(3) , col_4 TINYINT(2) ZEROFILL , col_5 TINYINT(3) ZEROFILL ); INSERT INTO foo_test( col_1,col_2,col_3,col_4,col_5 ) SELECT 1, 1,1,1,1 UNION ALL SELECT 10, 10,10,10,10 UNION ALL SELECT 100, 100,100,100,100; SELECT * FROM foo_test; **OUTPUT:-** col_1 col_2 col_3 col_4 col_5 ------ ------ ------ ------ -------- 1 1 1 01 001 10 10 10 10 010 100 100 100 100 100

MySQL mostrará los 0 en el inicio si se usa zerofill al crear la tabla. Si no usaste zerofill, entonces no es efectivo.