Database no respeta la logica

Iniciado por Skeletron, 17 Marzo 2010, 14:29 PM

0 Miembros y 3 Visitantes están viendo este tema.

Skeletron

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:


^Tifa^

Hola  :D

Me alegro que hayas podido descargar el Pdf  ;)

Verifica que realmente el campo ID sea SIGNED y no UNSIGNED

DESCRIBE TABLE test1

Skeletron

Código (sql) [Seleccionar]

+-------+------------------------------+------+-----+---------+-------+
| Field | Type                         | Null | Key | Default | Extra |
+-------+------------------------------+------+-----+---------+-------+
| id    | tinyint(3) unsigned zerofill | YES  |     | NULL    |       |
+-------+------------------------------+------+-----+---------+-------+
1 row in set (0.01 sec)


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

^Tifa^

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.

^Tifa^

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  :-(

CitarSi 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.





Skeletron

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?

^Tifa^

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:

Skeletron

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

^Tifa^

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.

Skeletron

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!