sql >> Base de Datos >  >> RDS >> Mysql

¿Cuál es el significado del parámetro TINYINT(parámetro)?

En cuanto a los datos, tinyint(1) , tinyint(2) , tinyint(3) etc. son todos exactamente iguales. Todos están en el rango -128 a 127 para SIGNED o 0-255 para UNSIGNED . Como señalaron otras respuestas, el número entre paréntesis es simplemente una sugerencia de ancho de visualización.

Sin embargo, es posible que desee tener en cuenta que las cosas de application=wise pueden verse diferentes. Aquí, tinyint(1) puede tomar un significado especial. Por ejemplo, Connector/J (conector Java) trata tinyint(1) como un valor booleano, y en lugar de devolver un resultado numérico a la aplicación, convierte los valores a true y false . esto se puede cambiar a través de tinyInt1isBit=false parámetro de conexión.

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 de 0 a 255.

Silenciosamente truncará los valores fuera de rango:

mysql> create table a
    -> (
    ->    ttt tinyint(1)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> insert into a values ( 127 );
Query OK, 1 row affected (0.00 sec)

mysql> insert into a values ( -128 );
Query OK, 1 row affected (0.00 sec)

mysql> insert into a values ( 128 );
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> insert into a values ( -129 );
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from a;
+------+
| ttt  |
+------+
|  127 |
| -128 |
|  127 |
| -128 |
+------+
4 rows in set (0.00 sec)

mysql>

... a menos que cambie el sql_mode o cambie la configuración del servidor:

mysql> set sql_mode=STRICT_ALL_TABLES;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into a values ( -129 );
ERROR 1264 (22003): Out of range value for column 'ttt' at row 1
mysql>

El valor utilizado en el DDL para el tipo de datos (p. ej., tinyint(1)) es, como sospechaba, el ancho de visualización. Sin embargo, es opcional y los clientes no tienen que usarlo. El cliente MySQL estándar no lo usa, por ejemplo.

https://dev.mysql .com/doc/refman/5.1/en/integer-types.html

https://dev .mysql.com/doc/refman/5.0/en/numeric-type-overview.html

MySql:Tinyint (2 ) vs tinyint(1) - ¿cuál es la diferencia?