Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Skeletron en 14 Marzo 2010, 04:35 am



Título: Longitud de Tipos de Datos
Publicado por: Skeletron en 14 Marzo 2010, 04:35 am
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????


Título: Re: Longitud de Tipos de Datos
Publicado por: Nakp en 14 Marzo 2010, 08:23 am
es la cantidad de bytes... valores de -128 a 127 si tiene signo... 255 so no tiene :P (1 byte)


Título: Re: Longitud de Tipos de Datos
Publicado por: Skeletron en 14 Marzo 2010, 16:16 pm
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á?


Título: Re: Longitud de Tipos de Datos
Publicado por: ^Tifa^ en 14 Marzo 2010, 16:19 pm
Se resetea al valor maximo soportado por el tipo de datos tinyint  ;)  si es negativo 127  si es positivo 255  de ahi no pasara.


Título: Re: Longitud de Tipos de Datos
Publicado por: Skeletron en 14 Marzo 2010, 17:43 pm
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


Título: Re: Longitud de Tipos de Datos
Publicado por: ^Tifa^ en 14 Marzo 2010, 18:58 pm
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  ;)


Título: Re: Longitud de Tipos de Datos
Publicado por: Skeletron en 14 Marzo 2010, 19:50 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 ???


Título: Re: Longitud de Tipos de Datos
Publicado por: ^Tifa^ en 14 Marzo 2010, 20:40 pm
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.


Título: Re: Longitud de Tipos de Datos
Publicado por: Skeletron en 14 Marzo 2010, 21:11 pm
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'?


Título: Re: Longitud de Tipos de Datos
Publicado por: Nakp en 14 Marzo 2010, 21:18 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


Título: Re: Longitud de Tipos de Datos
Publicado por: ^Tifa^ en 14 Marzo 2010, 21:23 pm
Citar
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

Eso mismo, aunque no se en que lenguaje es que aplica... tengo amigos programadores webs que usan ese tipo de filtros para limitar la salida presentada finalmente en su proyecto. Pero ciertamente adentro del motor, esto no aplica seguira como bien dices guardandose datos hasta su limite  ;)

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

Si ingresas '300' y es un unsigned tinyint, se resetea y se guarda 255 + un warning por parte de MySQL  :xD  si es un tinyint negativo se resetea y se guarda 127 + el warning  :xD

Por cierto, yo tengo la Biblia de MySQL en la PC de mi trabajo, me lo descargue aunque no recuerdo de donde  :xD  si tanto quieres el PDF puedo subirlo a un servidorcito que hay alli y pasarte el acceso por ftp y lo bajas...