Longitud de Tipos de Datos

Iniciado por Skeletron, 14 Marzo 2010, 04:35 AM

0 Miembros y 1 Visitante están viendo este tema.

Skeletron

Hola gente.
Les comento que tengo una tabla en MySQL con un Tinyint(1)
Y hoy ingreso el valor: 10, y se ingresó correctamente!!.. Pero.. no se devería haber cortado a 1????

Nakp

es la cantidad de bytes... valores de -128 a 127 si tiene signo... 255 so no tiene :P (1 byte)
Ojo por ojo, y el mundo acabará ciego.

Skeletron

Si, eso es lo que ocupa cada tipo de dato.. Lo veo desde aqui: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

O sea que si le pongo longitud 1, en UNSIGNED, podre ingresar numeros del 0 al 255? y cuando ponga 256 que pasará?

^Tifa^

Se resetea al valor maximo soportado por el tipo de datos tinyint  ;)  si es negativo 127  si es positivo 255  de ahi no pasara.

Skeletron

O sea que si tengo un campo ID, con solo 214 entradas, y jamas habrán mas entradas en esa tabla (porque es una tabla de PAISES), lo que me conviene, es poner un Tinyint(1.)UNSIGNED... ya que los ID de los paises van desde el 1 al 214.....
Eso es así?

y entonces
Tinyint(2)UNSIGNED soporta 255*255 como numero maximo?
Si tengo una tabla con un ID que va del 1 al 65000, me conviene utilizar con (2), porque acepta numeros de 0 a 65025...

Repito:
No puedo conseguir en ningun lado el libro: La Biblia de Mysql... Argentina no tiene ni libros

^Tifa^

Que declares un campo como tinyint(2) no quiere decir que soporte una cantidad maxima de valores doble veces (nada de 255*255) seguira soportando lo mismo de siempre de 0 a 255 positivo y de 0 a 127 negativos.

Esto que haces de tinyint(valor) valor significa la cantidad de numeros o caracteres si fuese un tipo de dato alfanumerico a mostrar por pantalla, no la cantidad de datos a guardar dentro de si. Los tipos de datos numericos (tinyint, int, smallint, bigint, etc) tienen un tamanio fijo establecido dentro de si mismo, no lo filtras tu ni le indicas tu el tamano de valores a guardar como harias en un dato alfanumerico como (varchar, char, varbinary, etc). No funcionan iguales los tipos de datos....

Si quieres un campo que soporte 65,000 valores y son numericos enteros pues, puedes optar por SMALLINT que soporte de 0 a 60,000 valores unsigned, si lo quieres mayor tendras que optar por MEDIUMINT que soporta de 0 a 160,000 valores unsigned.

Un saludito  ;)

Skeletron

Cita de: ^TiFa^ en 14 Marzo 2010, 18:58 PM
Esto que haces de tinyint(valor) valor significa la cantidad de numeros

Entonces un tinyint(1) solo dejará ingresar los siguientes numeros?:
-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9 ???

^Tifa^

No hice referencia a cuantos te deja ingresar... porque si el tipo de datos soporta 255 aunque pongas tinyint(1) podras insertar cualquier valor hasta 255 y se guardara, decia que si pones tinyint(1) aunque se guarde 123 se mostrara por pantalla en un programa el valor 1 es mas para filtrar la salida de datos como se mostraran que la entrada de datos y su capacidad.

Skeletron

AHh!! Entendido... Digamos que solo se utiliza para filtrar los datos que devuelve el SELECT... pero e guarda el dato entero que ha entrado...
Me quedó claro

y si en un tinyint ingreso el numero '300', se guarda '255'? o '0'?

Nakp

Cita de: Skeletron en 14 Marzo 2010, 17:43 PM
Repito:
No puedo conseguir en ningun lado el libro: La Biblia de Mysql... Argentina no tiene ni libros

para que queres un libro? veo que es costumbre de muchos comprar un libro de java, mysql, php, etc... cuando compre uno de c++ me arrepenti porque en el encontre todo lo que podia encontrar en la documentacion oficial :P que siempre es el primer lugar donde busco xD

el valor en tinyint(valor) no filtra caracteres a ingresar porque no es un tipo de dato de cadena :P

si tu tabla es de paises te conviene tinyint pero no es necesario pasarle un valor como si fuese char o varchar que estos si guardan un max en la long de caracteres :P
Ojo por ojo, y el mundo acabará ciego.