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

Problema Clave Primaria

Estas en el tema de Problema Clave Primaria en el foro de Mysql en Foros del Web. He hecho una tabla en mysql, y he puesto como clave primaria un campo llamado cod_material, en tipo le he puesto varchar y en longitud ...
  #1 (permalink)  
Antiguo 17/04/2011, 13:13
 
Fecha de Ingreso: marzo-2008
Mensajes: 28
Antigüedad: 16 años, 9 meses
Puntos: 0
Problema Clave Primaria

He hecho una tabla en mysql, y he puesto como clave primaria un campo llamado cod_material, en tipo le he puesto varchar y en longitud 6. Yo este campo lo quiero para almacenar códigos de materiales, y cuando meto los códigos a traves de php si son números no me da problema, pero si en el codigo van letras si que me da problemas, es decir un codigo de 5 caracteres como puede ser 00001, no da problemas, pero si pongo a0001, si que me los da, porque ocurre esto, ¿Alguien me puede ayudar?
  #2 (permalink)  
Antiguo 17/04/2011, 13:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema Clave Primaria

Cita:
Iniciado por senit Ver Mensaje
He hecho una tabla en mysql, y he puesto como clave primaria un campo llamado cod_material, en tipo le he puesto varchar y en longitud 6. Yo este campo lo quiero para almacenar códigos de materiales, y cuando meto los códigos a traves de php si son números no me da problema, pero si en el codigo van letras si que me da problemas, es decir un codigo de 5 caracteres como puede ser 00001, no da problemas, pero si pongo a0001, si que me los da, porque ocurre esto, ¿Alguien me puede ayudar?
Sin ver el código me imagino que estás asignando el valor poniendo la cifra en el VALUE() del INSERT, pero no la estás encerrando entre apóstrofes... ¿no?
El tema es que cuando pones un número para ser asignado a un campo VARCHAR, lo tienes que poner entre apóstrofes para que sea una cadena:
Código MySQL:
Ver original
  1. INSERT INTO tabla(tabla_id) VALUES('00001')
Si lo pones sin ellos y es número, MySQL hace una conversión implícita y pone la cadena.
Pero cuando lo pones así:
Código MySQL:
Ver original
  1. INSERT INTO tabla(tabla_id) VALUES(a0001)
MySQL asume que a0001 es un nombre de columna, pero no una cadena. En esos caso tienes que ponerlo si o si entre apóstrofes pues no existe conversión implícita para esos casos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 17/04/2011, 15:02
 
Fecha de Ingreso: marzo-2008
Mensajes: 28
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problema Clave Primaria

Esta es mi query:

$query = "insert into materiales (COD_MATER, NOMBRE, PRECIO) values ('".$codigo."','".$nombre."','".$precio."')";

los valores los cojo de un formulario, y si que me los inserta, tanto si pongo 00001 como si pongo a0001, pero el problema viene luego cuando hago una consulta e intento acceder a dicho registro utilizando el codigo, cuando utilizo a0001, no accede al registro que lo contiene.

Gracias y saludos
  #4 (permalink)  
Antiguo 17/04/2011, 16:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema Clave Primaria

Ajá... ¿Y cómo es la consulta que haces? No la estás posteando.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 17/04/2011, 16:13
 
Fecha de Ingreso: marzo-2008
Mensajes: 28
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problema Clave Primaria

No me funciona en ninguna consulta, por ejemplo en la que pongo a continuación:

$query = "DELETE FROM materiales WHERE COD_MATER = $cod";

Yo hago un listado de materiales, y dejo la opción de modificarlos y de borrarlos mediante 2 enlaces y pasandole el codigo, pues como comentaba en el post anterior, si el codigo son solo números me funciona perfectamente, pero si incluye letras no.

Gracias y saludos
  #6 (permalink)  
Antiguo 17/04/2011, 16:26
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema Clave Primaria

Bueno, es en esencia el mismo problema... Sólo que no lo estás infieriendo.
Si COD_MATER es un VARCHAR, para que el WHERE funcione debe compararse con una cadena, y eso no es lo que estás haciendo cuando lo que hay en la variable $cod es a0001.
Tal y como la usas, la consulta, si el valor es el "a0001", quedaría:
Código MySQL:
Ver original
  1. DELETE FROM materiales WHERE COD_MATER =a0001
Donde "a0001" es interpretado como nombre de campo, por la simple razón de que comienza con una letra. Si lo que pones es "0001" lo interpreta bien porque lo interpreta como un uno (1) y hace la conversión implícita.
Lo que debe quedar en la consulta es:
Código MySQL:
Ver original
  1. DELETE FROM materiales WHERE COD_MATER ='a0001'
Esto sí compara una cadena con un VARCHAR.
¿Se entiende la diferencia?

Con lo que te comentaba en el primer post podrías haberlo inferido:
Cita:
MySQL asume que a0001 es un nombre de columna, pero no una cadena. En esos caso tienes que ponerlo si o si entre apóstrofes pues no existe conversión implícita para esos casos.
Esto se da siempre... no solamente en un INSERT.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 18/04/2011, 05:38
 
Fecha de Ingreso: marzo-2008
Mensajes: 28
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problema Clave Primaria

Tienes razón, he metido entre comillas simples la variable $cod y problema resuelto.

Muchas Gracias, me ha ayudado mucho, de verdad.

Saludos
  #8 (permalink)  
Antiguo 18/04/2011, 05:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema Clave Primaria

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: clave, primaria
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 13:58.