mysql: code d'erreur [1267]; Illégales mélange de classements (latin1_general_cs,IMPLICITE) et (latin1_swedish_ci,IMPLICITE) de l'opération '='

Je veux faire de la password colonne de ma table User pour être case sensitive dans mysql.

Qui suit est la description de la table:

/*Table: mst_user*/

   FIELD          TYPE          COLLATION        
-------------  ------------  -----------------
user_id        VARCHAR(100)  latin1_swedish_ci
first_name     VARCHAR(25)   latin1_swedish_ci
last_name      VARCHAR(25)   latin1_swedish_ci
USER_PASSWORD  VARCHAR(50)   latin1_swedish_ci
user_status    INT(11)       (NULL)           
version_id     INT(11)       (NULL)           
active_status  INT(11)       (NULL)           
user_type      INT(11)       (NULL)    

Pour faire de la USER_PASSWORD domaine sensible à la casse j'ai exécuté à la suite de la requête:

ALTER TABLE `mst_user` MODIFY `USER_PASSWORD` VARCHAR(50) COLLATE `latin1_general_cs`;

Cela a fonctionné, et le champ est maintenant sensible à la casse.

Mais j'ai un magasin de procédure qui exécute un SELECT requête sur ce tableau pour vérifier si l'utilisateur existe, pour l'identification.

Stockées Proc::

CREATE PROCEDURE `usp_password_verify`(ip_login_id         VARCHAR(200),
                                 ip_user_password    VARCHAR(200),
                                INOUT success     INT(1),
INOUT tbl_usr_password          VARCHAR(100),
INOUT  pkg_user_password         VARCHAR(100))
BEGIN
  SELECT COUNT(*)
    INTO success
    FROM mst_user
   WHERE UPPER (user_id) = UPPER (ip_login_id)
   AND USER_PASSWORD=ip_user_password;

   SET tbl_usr_password = '';
   SET pkg_user_password= '';
END$$

Lorsque j'appelle cette procédure stockée à partir de mon code java, j'obtiens l'erreur suivante:

**error code [1267]; Illegal mix of collations (latin1_general_cs,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='**

Quelqu'un peut aider ce qui est mal à cela?
Quelque chose qui fonctionne comme une simple requête donne une erreur lors de l'exécution dans une procédure stockée!?

  • Whoaaaa... ne pas stocker les mots de passe en clair! Magasin plutôt salé de hachage, de sorte que, dans le cas où votre base de données ne devient jamais compromise, il est difficile pour quiconque de découvrir de vos utilisateurs, les mots de passe. Voir Le guide définitif pour la base de formulaires authentification d'un site web pour plus d'informations.
  • bien que va être ma prochaine étape... d'abord je tiens à obtenir par le biais de ce problème.. je veux avoir une sensibilité à la casse de vérifier et de se débarrasser de l'erreur mentionnée ci-dessus.