MySQL Boolean" tinyint(1) " tiene valores de hasta 127?
Quería hacer un campo verdadero/falso para si un artículo está en stock.
Quería establecerlo en booleano ( que se convierte a tinyint(1)
), 1 para en stock, 0 para no en stock.
Estoy recibiendo feeds de los vendedores, así que pensé: "¿Qué pasa si pasan cuántos son instock?"
Así que me pregunté si insertaba un número mayor que 1 lo que sucedería. Asumí que por defecto sería 1.
Para mi sorpresa me permitirá mantener cualquier número hasta 127, cualquier cosa más por defecto 127.
¿Puede alguien explicar por qué?
4 answers
El tipo de datos firmado TINYINT
puede almacenar valores enteros entre -128 y 127.
Sin Embargo, TINYINT(1)
no cambia el valor mínimo o máximo que puede almacenar. Solo dice a mostrar solo un dígito cuando los valores de ese tipo se imprimen como salida.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-09 18:22:05
El tipo de datos tinyint
utiliza 1 byte de almacenamiento. se pueden almacenar 256 posibles valores enteros usando 1 byte (de -128 a 127). si se define como tinyint unsigned
entonces los valores negativos se descartan por lo que es posible almacenar (0 a 255).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-09 18:32:31
Vea aquí para ver 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.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-12-09 18:39:06
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 mientras se crea la tabla. Si no utilizas el zerofill entonces no es efectivo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-19 06:37:37