Исправление сломанных символов UTF8 MYSQL - PullRequest
1 голос
/ 14 июня 2011

Я пытаюсь выполнить процедуру, способную конвертировать неработающие символы 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;

Спасибо:)

1 Ответ

2 голосов
/ 14 июня 2011

Возможно, я неправильно это прочитал, но ... если ваши столбцы представляют собой строки utf8, которые были сохранены как столбец latin1 (и, как правило, шведский), и вы изменили свою таблицу так, чтобы столбец использовал новый набор символов и новыйправила сопоставления, то либо:

  1. Вы еще не изменили таблицу в рабочем состоянии ...

    В этом случае переходите прямо к документации WP о том, как это сделать.

  2. Измененная таблица уже находится в производстве ...

    В этом случае вы собираетесь преобразовать только часть вашей таблицы -- часть перед изменением произошла.В противном случае вы, скорее всего, получите сообщения об ошибках, подобные тем, которые вы получаете при преобразовании символов, отличных от ascii, туда и обратно.(Возможно, вы сможете обнаружить строки с разбитым utf8, используя несколько регулярных выражений.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...