Hola Jorge.
Según parece quieres encriptar cosas con un hash simple (en este caso md5), y a la vez mantener un sistema case sensitive.
Pues bien, lo bueno de los hash es que cada valor de digest es diferente para cada valor de entrada. Usando un ejemplo real:
Código:
md5(hola) -> 4d186321c1a7f0f354b297e8914ab240
md5(HolA) -> d4fa99092b02aa32703bb8dab17b9da9
El tema de cambiar el cotejamiento a utf8_bin... yo siempre uso utf_unicode_ci y me funciona bien con los hash.
Tienes que tener en cuenta los siguientes aspectos que puede que olvides alguno sin querer:
- Guardar como VARCHAR de longitud adecuada (32 para md5)
- Buscar el dato encriptado con dato encriptado (por ejemplo en el where -> where campo = md5($variable))
- Si pones el valor directamente sobre el where, recuerda ponerlo entre comillas.
Espero te haya ayudado. Saludos