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

Problema con UPPER

Estas en el tema de Problema con UPPER en el foro de Mysql en Foros del Web. Buenas gente. Quiero recuperar de mi base de usuarios de datos ignorando mayúsculas y minúsculas. Entonces para recuperar un nombre hago: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: ...
  #1 (permalink)  
Antiguo 22/05/2012, 02:08
Avatar de Heent  
Fecha de Ingreso: diciembre-2008
Mensajes: 140
Antigüedad: 15 años, 4 meses
Puntos: 6
Pregunta Problema con UPPER

Buenas gente. Quiero recuperar de mi base de usuarios de datos ignorando mayúsculas y minúsculas. Entonces para recuperar un nombre hago:

Código MySQL:
Ver original
  1. WHERE UPPER(usuario) = UPPER('$user') AND pas = '$pas'

Donde $user y $pas son el nombre de usuario y la contraseña respectivamente.

El problema es que hace como si el upper no estuviera (lo probé con LOWER y tengo el mismo problema).

Encuentra un usuario que se llame "Hola" solo si lo escribimos como toca y no en minúsculas o mayúsculas.

No se que puede estar mal.


Un saludo!
  #2 (permalink)  
Antiguo 22/05/2012, 04:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con UPPER

Para que diferencie entre mayúsculas y minúsculas, la tabla debe definirse con el charset correcto. Los que pueden hacer diferenciación terminan en "_bin". De lo contrario deberas usar conversiones de casting de MySQL.
__________________
¿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 22/05/2012, 14:59
Avatar de Heent  
Fecha de Ingreso: diciembre-2008
Mensajes: 140
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: Problema con UPPER

He mirado en la documentación de mysql y dice:

"LOWER(CONVERT('$user' USING latin1))"

Pero sigue sin funcionar. Lo que me fastidia es que lo hice en otro proyecto y funcionaba perfectamente.

Un saludo y muchas gracias!
  #4 (permalink)  
Antiguo 23/05/2012, 02:46
 
Fecha de Ingreso: mayo-2012
Mensajes: 42
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Problema con UPPER

Hola Heent,

La sintaxis es

Código SQL:
Ver original
  1. ALTER schema tuschema DEFAULT COLLATE latin1_bin

¡Un saludo!
  #5 (permalink)  
Antiguo 23/05/2012, 08:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Problema con UPPER

Como yo lo veo. Si quieres que en tus consultas no se distinga entre mayúsculas y minúsculas, debes usar para el campo en el que buscas una collation con terminación _ci (case insensitive) acorde con tu charset. Puede hacerse al vuelo en la consulta, pero yo te diría que indicaras una collation de ese tipo para el campo
Me explicaré
Imaginemos que tu base, tabla y campo usan un charset latin1
pues al campo de la tabla sobre el que realizas esas búsquedas le pones la collation latin1_spanish_ci
ALTER TABLE `tutabla` CHANGE `campo` `campo` VARCHAR( 50 ) CHARACTER SET latin1 COLLATE latin1_spanish_ci NOT NULL

Vigila el tamaño y si aceptas NOT NULL. Con phpmyadmin es muy fácil. Accedes a la base, entras en la tabla y luego en estructura editas el campo y le cambias la collation.

Pero ojo, si el charset es utf8, tendrás que usar utf8_spanish2_ci
ALTER TABLE `tutabla` CHANGE `campo` `campo` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_spanish2_ci NOT NULL

Estas collations o cotejamientos son apropiados para el español, pero si usas otras lenguas podríamos buscar el cotejamiento apropiado.

La propuesta de davikt es también buena idea, pero no con _bin, pues por binario se hace búsqueda exacta, lo que tú quieres evitar; además lo que hace es cambiar el cotejamiento por defecto de tu base en general. También funcionará, pero si no has elegido cotejamiento, la pondrá a todos los efectos, y es posible que tú no desees que funcione así en todos los campos.
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 00:03.