谁能帮我,我怎么能解决这个错误排序规则的非法组合(utf8_general_ci,COERCIBLE)和(latin1_swedish_ci,隐含的)
Illegal mix of collations (utf8_general_ci,COERCIBLE) and (latin1_swedish_ci,IMPLICIT) for operation 'locate'
我已执行我的存储过程在Server1和它的做工精细,但它会在服务器2上引发错误。我已经检查了两台服务器上的所有表和存储过程,它们都是一样的。
任何人都可以帮助我解决这个问题和解决方案。
这里是存储过程。
DELIMITER $$
DROP PROCEDURE IF EXISTS `UPDATEPASSWORD` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `UPDATEPASSWORD`(IN empn CHAR(9), IN oldpassword VARCHAR(255), IN newpassword VARCHAR(255))
main:BEGIN
DECLARE diction INT;
DECLARE prevpass INT;
DECLARE len INT;
DROP TABLE IF EXISTS passwordstatus;
CREATE TEMPORARY TABLE passwordstatus
(
`passwordstatus` VARCHAR(127)
);
PREPARE stmt1 FROM "select count(seqid) into @diction
from dictionary where instr(?,word)>0 or instr(REVERSE(?),REVERSE(word))>0 ";
SET @a = newpassword;
SET @b = newpassword;
EXECUTE stmt1 USING @a,@b;
DEALLOCATE PREPARE stmt1;
IF @diction > 0 THEN
START TRANSACTION;
PREPARE stmt1 FROM "INSERT INTO passwordstatus VALUES (?)";
SET @a = "PASSWORD CONTAINS COMMONLY USED WORDS";
EXECUTE stmt1 USING @a;
DEALLOCATE PREPARE stmt1;
COMMIT;
SELECT * FROM passwordstatus;
LEAVE main;
END IF;
PREPARE stmt1 FROM "select count(seqid) into @prevpass
from prevpass where (instr(sha1(?),passwd)>0 or instr(REVERSE(sha1(?)),REVERSE(passwd))>0)and empno = ?";
SET @a = newpassword;
SET @b =empn;
EXECUTE stmt1 USING @a, @a, @b;
DEALLOCATE PREPARE stmt1;
IF @prevpass > 0 THEN
START TRANSACTION;
PREPARE stmt1 FROM "INSERT INTO passwordstatus VALUES (?)";
SET @a = "PASSWORD CONTAINS PREVIOUSLY USED PASSWORDS";
EXECUTE stmt1 USING @a;
DEALLOCATE PREPARE stmt1;
COMMIT;
SELECT * FROM passwordstatus;
LEAVE main;
END IF;
PREPARE STMT1 FROM " SELECT COUNT(seqid) INTO @prevpass FROM prevpass where empno = ? ";
SET @a = empn;
EXECUTE STMT1 USING @a;
DEALLOCATE PREPARE STMT1;
START TRANSACTION;
IF @prevpass = 6 THEN
PREPARE STMT1 FROM "DELETE FROM prevpass WHERE EMPNO = ? ORDER BY seqid LIMIT 1";
SET @a = empn;
EXECUTE STMT1 USING @a;
DEALLOCATE PREPARE STMT1;
END IF;
PREPARE STMT FROM " UPDATE emppass SET passwd = sha1(?),lastupdate = now() WHERE empno = ? ";
SET @a = newpassword;
SET @b = empn;
EXECUTE STMT USING @a,@b;
DEALLOCATE PREPARE STMT;
PREPARE STMT1 FROM " INSERT INTO prevpass (empno,passwd,createdate) VALUES (?,sha1(?),now())";
SET @a = empn;
SET @b = newpassword;
EXECUTE STMT1 USING @a,@b;
DEALLOCATE PREPARE STMT1;
PREPARE stmt1 FROM "INSERT INTO passwordstatus VALUES (?)";
SET @a = "PASSWORD UPDATED SUCCESSFULLY";
EXECUTE stmt1 USING @a;
DEALLOCATE PREPARE stmt1;
COMMIT;
SELECT * FROM passwordstatus;
END $$
DELIMITER ;
没有实际的SQL,很难想象 – ajreal