Cuando usamos una longitud de argumento con tipos de datos numéricos, hasta donde yo sé, esto especifica el ancho de la pantalla.
Intenté lo siguiente:
mysql> create table boolean_test (var1 boolean, var2 tinyint);
Query OK, 0 rows affected (0.10 sec)
mysql> show create table boolean_test;
+--------------+-------------------------
| Table | Create Table
+--------------+-------------------------
| boolean_test | CREATE TABLE `boolean_test` (
`var1` tinyint(1) DEFAULT NULL,
`var2` tinyint(4) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+--------------+---------------------------
1 row in set (0.00 sec)
En primer lugar, tinyint es un valor de 1 byte. Entonces, ¿cuál es el significado de tinyint(4)
? No puede haber 4 dígitos.
mysql> insert into boolean_test values(101,112);
Query OK, 1 row affected (0.03 sec)
mysql> select * from boolean_test;
+------+------+
| var1 | var2 |
+------+------+
| 10 | 112 |
| 101 | 112 |
+------+------+
2 rows in set (0.00 sec)
Veo que en tinyint almacené un 10 y 101 y pude recuperar estos valores a pesar de que se define como tinyint (1).
¿No debería ver un 1 para var1
? Es decir, solo 1 dígitos de visualización?
Respuestas:
En cuanto a los datos,
tinyint(1)
,tinyint(2)
,tinyint(3)
etc, todos ellos exactamente lo mismo. Todos están en el rango -128 a 127 paraSIGNED
o 0-255 paraUNSIGNED
. Como señalaron otras respuestas, el número entre paréntesis es simplemente una pista de ancho de pantalla.Sin embargo, es posible que desee tener en cuenta que la aplicación = las cosas sabias pueden verse diferentes. Aquí,
tinyint(1)
puede tener un significado especial. Por ejemplo, el Conector / J (conector Java) tratatinyint(1)
como un valor booleano y, en lugar de devolver un resultado numérico a la aplicación, convierte los valores entrue
yfalse
. Esto se puede cambiar a través deltinyInt1isBit=false
parámetro de conexión.fuente
Un tinyint (1) puede contener números en el rango de -128 a 127, debido a que el tipo de datos es de 8 bits (1 byte); obviamente, un tinyint sin signo puede contener valores 0-255.
Silenciosamente se truncará fuera de los valores de rango:
... a menos que cambie
sql_mode
o cambie la configuración del servidor:El valor utilizado en el DDL para el tipo de datos (por ejemplo: tinyint (1)) es, como sospechaba, el ancho de la pantalla. Sin embargo, es opcional y los clientes no tienen que usarlo. El cliente MySQL estándar no lo usa, por ejemplo.
fuente