一般情况下,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的字符进入时便可正确处理了!