如何解决修复损坏的UTF8字符MYSQL
| 我正在尝试执行一个能够转换损坏的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;
谢谢 :)
解决方法
我可能读错了,但是...如果您的列是utf8字符串,并存储为latin1(通常为瑞典语)列,并且您更改了表,以使该列使用新的字符集和新的排序规则,然后:
您尚未更改生产中的表格...
在这种情况下,请直接转到WP文档以获取有关操作方法的信息。
修改过的表格已经投入生产...
在这种情况下,您将仅转换表的一部分-发生更改之前的部分。否则,您可能会收到错误消息,例如来回转换非ASCII字符时收到的错误消息。 (您可以使用几个正则表达式来检测utf8损坏的字符串。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。