mysql - 修复损坏的 UTF8 字符 MYSQL

标签 mysql database-design utf-8 internationalization

我正在尝试做一个能够转换损坏的 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;

谢谢:)

最佳答案

我可能读错了,但是......如果你的列是存储为 latin1(通常是瑞典语)列的 utf8 字符串,并且你更改了你的表,以便该列使用新的字符集和新的排序规则,然后:

  1. 您尚未在生产环境中更改表...

    在这种情况下,直接跳转到 WP documentation关于如何去做。

  2. 修改后的表已经在生产中...

    在这种情况下,您将只转换表的一部分——更改发生之前的部分。如果不这样做,您可能会收到错误消息,就像您在来回转换非 ascii 字符时收到的错误消息一样。 (您可以使用几个正则表达式来检测带有损坏的 utf8 的字符串。)

关于mysql - 修复损坏的 UTF8 字符 MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6335775/

相关文章:

php - 如何将此函数转换为laravel函数

database-design - 创建物化 View 或新表哪个更好?

HTML 编码问题 - 显示 "Â"字符而不是 " "

c++:如何在utf8中支持代理字符

mysql - Wordpress 站点——连接到数据库时出错——仅在高流量时

mysql - 如何根据另一个表中的两个日期字段获取一个表中的记录数

php - 单击按钮后如何使用 php 更新 mysql 表中的 x 和 y 列值?

mysql - 设计工作机会表格

database - 数据库中电子邮件地址的最佳长度是多少?

mysql - 如何在 phpMyAdmin 中显示 UTF-8 字符?