Я пытаюсь выполнить процедуру, способную конвертировать неработающие символы UTF8.Это мой SP:
CREATE DEFINER=`root`@`localhost` PROCEDURE `conversorUTF8`()
BEGIN
DECLARE con_id, con_apellido, con_direccion VARCHAR (60);
DECLARE done INT DEFAULT 0;
DECLARE CID CURSOR FOR SELECT id, direccion FROM alumnos;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
DECLARE exit handler for sqlexception rollback;
DECLARE exit handler for sqlwarning rollback;
OPEN CID;
read_loop: LOOP
FETCH CID into con_id, con_direccion;
IF done THEN
LEAVE read_loop;
END IF;
CASE WHEN (SELECT CONVERT(CONVERT(CONVERT(con_direccion USING latin1)using binary)using utf8)) IS NOT NULL THEN
UPDATE alumnos SET direccion=CONVERT(CONVERT(CONVERT(con_direccion USING latin1)using binary)using utf8) where id = con_id ;
END CASE;
END LOOP;
CLOSE CID;
END
Проблема заключается в том, что когда у меня уже есть строка, преобразованная с помощью 'á', 'é' и т. Д., И я пытаюсь снова преобразовать эту строку, обновление завершается неудачно с этимошибка:
UPDATE alumnos SET direccion=CONVERT(CONVERT(CONVERT(con_direccion USING latin1)using binary)using utf8) where id = con_id ;
Invalid utf8 character string.
Вот почему мое ЗАЯВЛЕНИЕ О СЛУЧАЕ:
CASE WHEN (SELECT CONVERT(CONVERT(CONVERT(con_direccion USING latin1)using binary)using utf8)) IS NOT NULL THEN
Но что-то все еще не получается.
Любые советы?
Здесь решение:
alter table alumnos change direccion direccion VARCHAR(100) CHARACTER SET latin1;
alter table alumnos change direccion direccion VARBINARY(100);
alter table alumnos change direccion direccion VARCHAR(100) CHARACTER SET utf8;
Спасибо:)