Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

221
Vistas
¿Debo ingresar números de 2 dígitos en TINYINT?

Necesito una columna que pueda almacenar valores desde -1 (negativo 1) a +15 (positivo 15).

Estoy usando una columna TINYINT(2) en este momento y funciona bien.

Necesito saber si esto es ideal y seguro de usar porque leí en línea que TINYINT SOLO debe usarse para valores binarios como 1 y 0.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

MySQL TINYINT tiene un almacenamiento de 1 byte.

Se puede almacenar un valor sin signo en el rango de 0 a 255 o un valor con signo en el rango de -128 a 127.

También tenga en cuenta que 2 en TINYINT(2) no limita la longitud de su valor a 2 dígitos. más información en este enlace: ¿Cuál es el tamaño de la columna de int (11) en mysql en bytes?

over 4 years ago · Santiago Trujillo Denunciar

0

TINYINT almacenará su valor perfectamente bien; sin embargo, no garantizará que sea correcto (exactamente en ese rango). Tenga en cuenta que (2) solo está relacionado con el relleno cuando se selecciona a través de la línea de comando y no tiene nada que ver con el límite. Normalmente no lo necesita en absoluto. TINYINT (firmado) almacenará valores de -128 a 127 independientemente de si agrega (n) al final o no.

Si quieres asegurarte de que el valor esté siempre exactamente en el rango entre -1 y 15, tienes dos opciones:

  1. Usando la restricción CHECK sobre el TINYINT existente (solución recomendada):

     CREATE TABLE tiexample( val TINYINT NOT NULL, CONSTRAINT val_range CHECK(val>=-1 AND val<=15) ); INSERT INTO tiexample(val) VALUES(122); ERROR 4025 (23000): CONSTRAINT `val_range` failed for `test`.`tiexample` INSERT INTO tiexample(val) VALUES(12); Query OK, 1 row affected (0.001 sec)
  2. Listado de todos los valores como ENUM:

     CREATE TABLE tiexample( val ENUM("-1","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15") NOT NULL, CONSTRAINT val_range CHECK(val<>"") ); INSERT INTO tiexample(val) VALUES("122"); ERROR 4025 (23000): CONSTRAINT `val_range` failed for `test`.`tiexample` INSERT INTO tiexample(val) VALUES("12"); Query OK, 1 row affected (0.001 sec)

    Tenga en cuenta que al usar este método debe insertar los valores entre comillas (como "8", no solo 8). Además, en primer lugar, puede parecer extraño que usemos la restricción CHECK aquí, pero es necesaria porque, de forma predeterminada, al insertar un valor no válido en el campo ENUM, se insertará una cadena vacía en la tabla (no NULL, es una cadena vacía). Puede solucionar ese problema y omitir la restricción CHECK si usa este modo sql antes de insertarlo en la tabla:

     SET SQL_MODE = 'Traditional';

    Personalmente, no lucharía con el tipo ENUM. Es más adecuado para diferentes casos de uso.

Nota al pie: Las restricciones CHECK están disponibles y funcionan solo en MySQL MySQL 8.0.16+ y MariaDB 10.2.1+. Las versiones anteriores aceptan la restricción pero nunca la usan (las ignorará).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda