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é?

Author: JD Isaacks, 2010-12-09

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.

 54
Author: BoltClock,
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).

 7
Author: Nathan,
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.

 6
Author: mdm,
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.

 0
Author: Rabeel Javed,
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