目前使用的数据库是mysql而且默认的数据字符集是“utf-8”,当小程序用户的昵称中含有emoji图片的时候保存到数据库就会有问题。使用mysql数据库的时候,如果字符集是UTF-8,当存储emoji表情的时候,会抛出异常(比如微信开发获取用户昵称,有的用户的昵称用的是emoji的图像)这是由于字符集不支持的异常,因为utf-8编码有可能是两个,三个,四个字节,其中Emoji表情是四个字节,而mysql的utf-8编码最多三个字节,所以导致数据插不进去。
典型的sql错误日志如下:
Incorrect string value: ‘\xF0\x9F\x98\x8A\xF0\x9F…’ for column ‘content’ at row 1
下面是修改方案:
第一步:
1、[mysql]
default-character-set=utf8
修改成
default-character-set=utf8mb4
2、[mysqld]
character-set-server=utf8
修改成
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect = ‘SET NAMES utf8mb4’
character-set-client-handshake=false
第二步:
此时要重启一下mysql服务才可以正常运用。
重启mysql方式:命令行方式——打开cmd,输入net stop mysql,然后在输入net start mysql即可;
如果命令行重启方式不行的话,可以使用 window的 启动任务管理器 中的服务选项卡进行重启。
第三步:
修改数据库、数据库表和表内字段的编码
修改了数据库被访问的编码还是不够的,因为我们还有一个就是数据库、数据库表、以及表字段的编码也要一并的修改。
如果数据库原本就是新的数据库,从零开始的话,那么只要在建库,建表前设置一下,就应该没问题了。
如果在原本的数据库中进行升级的,所以需要对数据库、表、字段的编码都要进行修改。
注意:一定要修改字段编码,因为只修改了数据库,数据库表的编码的话,是不行的,因为原本的字段表编码还是原本的utf8编码。如果不行的话,你可以对数据库表的编码进行修改,然后导出数据库,查看一下刚刚修改的数据库表的创建字段就可以了,上面都会附上字段的编码为utf8,所以必须要对字段进行编码修改。
修改方式有两种,一种是通过命令行的方式,另一种是使用数据库管理软件进行修改的,在此就只写在管理软件中修改的方式,使用SQLyog可以轻松修改 步骤如下:
1、修改数据库编码为utf8mb4
在数据库右键菜单中->改变数据库 或者选中数据库按F6,在弹的更改数据库面板中,修改基字符集和数据库排序规则,
如下图
2、修改数据库表编码为utf8mb4,修改成如下
选中需要修改的表,在右键菜单中,选择"改变表",在右边面板上修改字符集和核对,如图所示
首先导出数据库的**结构以及数据**到sql文件中
然后修改sql文件中的表中字段的字符集属性,修改方法如下:
找到你想要修改的表,创建方法 就是 CREATE TABLE *** 这样的sql语句
我就是将上图绿框中的 CHARACTER SET utf8 修改为 CHARACTER SET utf8mb4
也有可能导出的sql语句中没有 CHARACTER SET utf8 的设置,那就添加上
然后将修改好的sql脚本导入,如下图
导入修改好的脚本,你就可以愉快地插入带emoji表情了!!!
补充下:
如果在执行sql语句过程中出现以下错误:
Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation '='
则需要执行下以下sql语句:
ALTER DATABASE '数据库名称' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `表名` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE `表名` MODIFY COLUMN `字段名`VARCHAR(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;