Lorsque j'exécute la procédure suivante
call clean_email('johnny@c.com');
J'obtiens l'erreur suivante Mélange illégal des collations (utf8mb4_general_ci,COERCIBLE) et (latin1_swedish_ci,IMPLICIT) pour l'opération '='.
J'ai essayé de modifier les collations pour les applications de table, mais l'erreur ne se résout toujours pas. Que puis-je faire pour résoudre ce problème ? Dois-je modifier la procédure ?
CREATE DEFINER=`root`@`%` PROCEDURE `clean_email`(_email_ varchar(128))
this_proc : BEGIN
declare _appId bigint unsigned;
/*TEMP*/ declare _resumeId bigint unsigned;
DECLARE done INT DEFAULT FALSE;
DECLARE cursor_i CURSOR FOR
/*TEMP*/ (SELECT appId, null as "resumeId" FROM _appendix WHERE lower(`value`) = lower(_email_) AND lower(`key`)="applicantemail")
-- LATER -- andOr /*TEMP*/ UNION
-- LATER -- (SELECT id
-- LATER -- andOr /*TEMP*/, resumeId
-- LATER -- FROM cbax_application WHERE lower(`name`) = lower(_email_))
;
/*TEMP*/ DECLARE cursor_old CURSOR FOR select id from applications where
/*TEMP*/ CASE WHEN formData is null OR trim(formData)="" THEN false ELSE
/*TEMP*/ lower(JSON_UNQUOTE(JSON_EXTRACT(CONVERT(formData using utf8mb4),'$.candidateParams.ApplicantEmail'))) = lower(_email_) END;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
GET DIAGNOSTICS CONDITION 1 @p1 = RETURNED_SQLSTATE, @p2 = MESSAGE_TEXT;
ROLLBACK;
select "Failed" as "status", @p1 as "sql_state", @p2 as "message_text";
END;
-- ---------------------
-- Input Validations --
IF(_email_ IS NULL or instr(_email_,"@") < 2) THEN
select "Failed" as "status", 0 as "sql_state", "Email id is required." as "message_text";
LEAVE this_proc;
END IF;
-- END Input Validations --
-- ------------------------
START TRANSACTION;
OPEN cursor_i;
read_loop: LOOP
FETCH cursor_i INTO _appId
/*TEMP*/, _resumeId
;
IF done THEN
LEAVE read_loop;
END IF;
DELETE FROM cbax_application WHERE id = _appId;
DELETE FROM cbax_application_blob WHERE appId = _appId;
DELETE FROM job_info WHERE appId = _appId;
DELETE FROM `resume` WHERE id = _resumeId;
-- LATER -- DELETE FROM _values WHERE appId = _appId;
-- LATER -- DELETE FROM _letter WHERE appId = _appId;
-- LATER -- DELETE FROM _history WHERE appId = _appId;
/*TEMP*/ DELETE FROM _appendix WHERE appId = _appId;
END LOOP;
CLOSE cursor_i;
/*START TEMP*/
SET done = FALSE;
OPEN cursor_old;
old_loop: LOOP
FETCH cursor_old INTO _appId;
IF done THEN
LEAVE old_loop;
END IF;
DELETE FROM applications WHERE id = _appId;
DELETE FROM _values WHERE appId = _appId;
DELETE FROM_letter WHERE appId = _appId;
DELETE FROM _history WHERE appId = _appId;
END LOOP;
CLOSE cursor_old;
/*END TEMP*/
select "Success" as "status";
COMMIT;
END