【开发日常】解决mysql存储emoji报错问题

一般情况下,mysql在创建表单的时候会默认将字符串类型的字段字符集设置成utf8
在这里插入图片描述

对于绝大多数的场景下,这样的设置并无问题。但是当用户提交的信息中包含了诸如emoji表情在内的超出3字节utf8编码的字符时,插入修改都会出现问题:
在这里插入图片描述
这时就需要将默认的utf8改成utf8mb4
在这里插入图片描述

utf8mb4与utf8不同,他的全称是(utf8 most byte4)。专门用来兼容四字节的unicode。

由于utf8mb4是utf8的超集,所以直接将编码改为utf8mb4之后不需要做其他转换。

然而,手动一个一个修改实在是太麻烦了,我们可以封装一个存储过程:

CREATE DEFINER=`admin`@`%` PROCEDURE `convert_charset`(IN dbName varchar(100),charSet varchar(100))
BEGIN
 
    declare stop int default 0;
 
    declare count int default 0;
 
    declare prepSql varchar(1000);
 
    declare tableName varchar(100);
 
    declare cur CURSOR FOR select table_name from information_schema.tables where table_schema=dbName and TABLE_COMMENT != 'VIEW';
 
    declare CONTINUE HANDLER FOR SQLSTATE '02000' SET stop = null;
 
    OPEN cur;
 
    FETCH cur INTO tableName;
 
    WHILE ( stop is not null) DO
 
        set count=count+1;
 
        set prepSql = concat('alter table `',tableName,'` convert to character set ',charSet);
 
        set @sql1 = prepSql;
 
        prepare stmt_p from @sql1;
 
        execute stmt_p;
 
        FETCH cur INTO tableName;
 
    END WHILE;
 
    CLOSE cur;
 
    SELECT count as '总计更改表单: ';
 
END

然后直接调用它,一键更改所有表单的字符集!

在这里插入图片描述

之后再有类似emoji的字符进入时便可正确处理了!
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值