【发布时间】:2012-11-08 08:29:50
【问题描述】:
我想让我的用户表的password 列在mysql 中为case sensitive。
以下是表格说明:
/*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)
为了使USER_PASSWORD 字段区分大小写,我执行了以下查询:
ALTER TABLE `mst_user` MODIFY `USER_PASSWORD` VARCHAR(50) COLLATE `latin1_general_cs`;
这有效,该字段现在区分大小写。
但我有一个存储过程,它在此表上执行 SELECT 查询以检查用户是否存在给定凭据。
存储过程::
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$$
当我从我的 java 代码中调用这个存储过程时,我收到以下错误:
**error code [1267]; Illegal mix of collations (latin1_general_cs,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '='**
任何人都可以帮助解决这个问题吗? 在存储过程中执行时,作为简单查询的东西会出错!?
【问题讨论】:
-
哇哦... 不要存储明文密码!而是存储一个 salted 散列,以便在您的数据库遭到破坏时,任何人都很难发现您用户的密码。请参阅The definitive guide to forms based website authentication 了解更多信息。
-
嗯,这将是我的下一步...首先我想解决这个问题..我想进行区分大小写检查并摆脱上述错误。
标签: mysql sql mysql-error-1267