Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Campo smallint (mysql)

Estas en el tema de Campo smallint (mysql) en el foro de Bases de Datos General en Foros del Web. Buenas; Quisiera saber qué es lo que indica el tamaño para los campos numéricos. Hasta hoy pensaba que indicaba el rango para los números, esto ...
  #1 (permalink)  
Antiguo 22/10/2003, 03:20
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
Campo smallint (mysql)

Buenas;

Quisiera saber qué es lo que indica el tamaño para los campos numéricos. Hasta hoy pensaba que indicaba el rango para los números, esto es: si defino un campo como - ID smallint(6) unsigned NOT NULL auto_increment - esto me va a dar lugar a los números que se enuentren entre 0 y 999999 ¿No?. Pero sin embargo hoy me ha dado por hacer pruebas y le he puesto smallint(1) suponiendo que cuando pasase de '9' me daría un error, pero no lo ha echo, siono que me ha seguido insertando números por encima de 9 y también por encima de 99

¿Por qué?

Gracias
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #2 (permalink)  
Antiguo 22/10/2003, 03:38
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 4 meses
Puntos: 17
Un smallint(1) debe ingresar números de -9 a 9. Si intentas esto:

INSERT INTO tabla SET campo=10;

Debe hacer lo mismo que esto:

INSERT INTO tabla SET campo=9;
__________________
M a l d i t o F r i k i
  #3 (permalink)  
Antiguo 22/10/2003, 04:11
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
Ok, pero si meto smallint(255) quiere decir que puedo meter números con un rango de 0 a 99999999999999999999999999999999999999999999999999 99999999999999999.... ?

Sé que no puedo, pero necesito una explicación.

Gracias
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #4 (permalink)  
Antiguo 22/10/2003, 04:57
Avatar de jercer  
Fecha de Ingreso: octubre-2003
Mensajes: 373
Antigüedad: 20 años, 6 meses
Puntos: 13
Me parece que teneis unas pequeñas lagunas sobre como funcionan los ordenadores internamente.

Funcionan en binario, si tu lo pones smallint(1), tendra una longitud de un byte (8 bits) o sea 2 elevado a 8 (256) numero, de los cuales la mitad son positivos y la otra mitad negativos, así es que lo máximo que deberias poder poner en esta celda seía 128 ó 127 (depende de si el cero coje de los campos positivos o negativos, no me acuerdo como era) .

Si tu pones smallint(255) seguramente no te deje ya que esto se suele hacer con numeros elevados a 2 (1, 2, 4, 8, 16, 32, 64, 128, 256, ...). Pero si te dejase te dejaría poner un numero mucho mas grande del que dices, ya que como tu creias que erá es el decimal, donde se multiplica por 10 un byte multiplica por 256.

Espero que lo hayais entendido no se si me he explicado bien

Última edición por jercer; 22/10/2003 a las 05:01
  #5 (permalink)  
Antiguo 22/10/2003, 06:52
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Según pone el manual de mysql, en la definición de los campos de tipo numérico, el valor entre paréntesis indica el número de dígitos máximo que se va a mostrar, es decir, es un valor de display no de tamaño o valores máximos del campo. Se esto fuera así ¿para que definir una docena de tipos de datos numéricos cuando con uno llegaría?.

Por cierto, un smallint ocupa dos bytes para alcanzar el rango de -32768 a 32767 o 0 a 65535 (sin signo).

Un saludo.

Última edición por Vice; 22/10/2003 a las 06:59
  #6 (permalink)  
Antiguo 22/10/2003, 09:37
Avatar de ferent  
Fecha de Ingreso: junio-2002
Ubicación: Madrid
Mensajes: 633
Antigüedad: 21 años, 10 meses
Puntos: 0
Entonces, si quiero que un valor numérico no sobrepase los 1000 números, ¿como restringo dicho smallint?
__________________
Culto es aquel que sabe donde encontrar lo que no sabe.
  #7 (permalink)  
Antiguo 23/10/2003, 02:12
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Aquí tienes la definición de tipos de datos mysql. Con el mysql, que yo sepa, tienes que elegir el tipo de dato que te cubra tus necesidades y el resto de restricciones hacerlas por programa. Aunque, si tienes paciencia puedes usar el tipo "enum" y escribir todo el conjunto de valores posibles (admite 65535 valores distintos).
Si usas otro de gestor de bases de datos puedes utilizar las restricciones (constraints) tipo "check" que te permiten establecer el rango de valores que se quiere usar (p.e: "check campo between 0 and 1000").
Si el gestor que usas no te permite hacer esto último, no te queda más remedio que hacerlo via programación, metiendo una regla de validación antes de insertar el dato en la tabla.
__________________
Estoy contagiado de Generación-I

Última edición por Vice; 23/10/2003 a las 04:56
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:02.