Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Skeletron en 17 Marzo 2010, 14:29 pm



Título: Database no respeta la logica
Publicado por: Skeletron en 17 Marzo 2010, 14:29 pm
Hola gente.
Estoy leyendo el libro: La Biblia de MySQL, para aprender un poco así los jodo menos con pregustas tontas.

En el libro dicen que haga algo, que hago en MySQL, pero los comportamientos son diferentes..

Será porque tengo una version diferente de MySQL a la que se usó para escribir el libro?'

he aqui:

(http://img221.imageshack.us/img221/4061/problemas.png)


Título: Re: Database no respeta la logica
Publicado por: ^Tifa^ en 17 Marzo 2010, 14:36 pm
Hola  :D

Me alegro que hayas podido descargar el Pdf  ;)

Verifica que realmente el campo ID sea SIGNED y no UNSIGNED

DESCRIBE TABLE test1


Título: Re: Database no respeta la logica
Publicado por: Skeletron en 17 Marzo 2010, 15:01 pm
Código
  1. +-------+------------------------------+------+-----+---------+-------+
  2. | FIELD | TYPE                         | NULL | KEY | DEFAULT | Extra |
  3. +-------+------------------------------+------+-----+---------+-------+
  4. | id    | tinyint(3) UNSIGNED ZEROFILL | YES  |     | NULL    |       |
  5. +-------+------------------------------+------+-----+---------+-------+
  6. 1 ROW IN SET (0.01 sec)
  7.  

Fijate que en la imagen se nota perfectamente que la he creado con zerofill..


Título: Re: Database no respeta la logica
Publicado por: ^Tifa^ en 17 Marzo 2010, 15:07 pm
Código:
Fijate que en la imagen se nota perfectamente que la he creado con zerofill..

Si Skeletron sin duda, pero aunque desconozco que version de MySQL usaron ahi, o si aplicaron algo despues de crear la tabla y no la especificaron en el libro (Tranquilo muchos de estos libros vienen con ejemplos a medias  ;) )

El problema en tu caso, y que no es tu culpa claro, es que el campo ID es de tipo UNSIGNED (Digase que no accepta numeros negativos)  ;)  podrias considerar cambiar ese tipo a SIGNED.


Título: Re: Database no respeta la logica
Publicado por: ^Tifa^ en 17 Marzo 2010, 15:18 pm
Hola nuevamente  :D

Efectivamente Skeletron, como te decia y para verificar lo que estaba diciendo, acabo de visitar la web de mysql.com  ;)  y disculpame si te recomende que cambiaras el campo a SIGNED  (pense que en este caso iba a ser posible) pero veo que no  :-(

Citar
Si especifica ZEROFILL para columnas numéricas,, MySQL añade automáticamente el atributo UNSIGNED en la columna.

Fuente: http://dev.mysql.com/doc/refman/5.0/es/numeric-type-overview.html

Aparentemente, lo que quieres hacer (numeros negativos) no es posible con el la funcionalidad Zerofill ya que automaticamente le asigna un atributo UNSIGNED (No negativos) al campo en cuestion .... no vas a poder cambiar el campo de UNSIGNED a SIGNED si le aplicas Zerofill.... pense que se podia, no, no se puede  :P Mysql no aplica el cambio y hace caso omiso.






Título: Re: Database no respeta la logica
Publicado por: Skeletron en 17 Marzo 2010, 15:23 pm
Si si, eso mismo leí recien.

Pero mi problema radica en otra parte:

Si intento ingresar un numero negativo, tendria que ingresar el 000, como lo miestra el libro cuando hace el select... Pero a mi no se me ingresa ni en 000 ni nada.. me da error..

Entiendes lo que digo?


Título: Re: Database no respeta la logica
Publicado por: ^Tifa^ en 17 Marzo 2010, 15:42 pm
Quisiera entender eso ultimo que dices... pero no  :rolleyes:

Porque no te deja ingresar 000 si 0 no es negativo y el tipo de datos tinyint soporta 3 cifras de 0 a 255 positivos.  :silbar:


Título: Re: Database no respeta la logica
Publicado por: Skeletron en 17 Marzo 2010, 16:25 pm
Tifa.. Mira la imagen...
Mira el Libro y mira lo mio.

Mira que el libro ingresó el valor -1, y fue ingresado correctamente (aunque se transformo a 000.. miralo cuando hace el SELECT en el libro)
Pero yo ingreso -1, y da un error


Título: Re: Database no respeta la logica
Publicado por: ^Tifa^ en 17 Marzo 2010, 16:36 pm
Lo he venido observando desde inicio Skeletron  :rolleyes:

Pero lamentablemente, no se basados en que MySQL esta dicho libro, pero actualmente con el MySQL 5.4 al menos que es el que yo tengo... lo del libro ya no aplica  ;) porque no aplica? por lo que te dije anteriormente. Un campo al asignarle la clausula ZEROFILL automaticamente se le agrega el atributo UNSIGNED que no va a permitir jamas que inserter numeros negativos de ningun tipo  ;) porque MySQL hace eso ahora y en el ejemplo del libro no? por diferencias de versiones es la posibilidad mas amplia que puedo tener.

No va a transformarte -1, ni -20 en 000 porque actualmente MySQL no accepta negativos en campos ZEROFILL que le atacha el atributo  UNSIGNED.

Puedes leer el libro como una guia, pero ten en cuenta que es algo antiguo y los ejemplos pueden estar basados en una version de MySQL que en aquel entonces soportaba estos cambios. Actualmente, no, no puedes ingresar numeros negativos en ZEROFILL independientemente del ejemplo mostrado. Hago referencia al funcionamiento actual de MySQL y por esa razon te pegue la URL anterior.


Título: Re: Database no respeta la logica
Publicado por: Skeletron en 17 Marzo 2010, 16:42 pm
Perfecto.
En el libro leí que decía que le agregaba un "UNSIGNED" automaticamente y todo eso, pero parece que la unica diferencia, es que a ellos les permite agregar el dato..
Es la version 4.1 de MySQL la que hablan en el libro.

Igualmente, no es problema.. Seguramente en la version actual cambiaron eso y listo :)

Cuando termine de leer este libro, sería importante leer algun "suplemento" que me actualice los cambios que se produjeron de la version 4.1 a la actual...
Si sabes de algo, me dices.. (EN ESPAÑOL!) :)

Tnks!


Título: Re: Database no respeta la logica
Publicado por: ^Tifa^ en 17 Marzo 2010, 16:47 pm
No hay problema Skeletron  :D

Es muy curioso que, el libro mencionase UNSIGNED y te permitiera insertar valores negativos  :-\  pero por otro lado lo entiendo, antes (Mysql 4.x) tomaba el negativo y lo transformaba en positivo (cero)

Como te decia, usalo de guia  ;)  pero ten bien claro que habran muchos ejemplos que actualmente como esta el motor no aplicaran 100%


Título: Re: Database no respeta la logica
Publicado por: Skeletron en 17 Marzo 2010, 17:00 pm
Sisi...
A ver si cuando termino de leerlo me leo alguno que me actualice a los cambios de la version actual

Voy en la pagina 110 de 841.. Así que aun me falta mucho