mysql数据库存储移动端自带emoji表情的方法(windows版)

 目前使用的数据库是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,在弹的更改数据库面板中,修改基字符集和数据库排序规则,

                如下图

             mysql数据库存储移动端自带emoji表情的方法(windows版)_第1张图片

             
2、修改数据库表编码为utf8mb4,修改成如下

             选中需要修改的表,在右键菜单中,选择"改变表",在右边面板上修改字符集和核对,如图所示

             mysql数据库存储移动端自带emoji表情的方法(windows版)_第2张图片
3、修改字段方式

          首先导出数据库的**结构以及数据**到sql文件中

mysql数据库存储移动端自带emoji表情的方法(windows版)_第3张图片

然后修改sql文件中的表中字段的字符集属性,修改方法如下:

          找到你想要修改的表,创建方法 就是 CREATE TABLE *** 这样的sql语句

mysql数据库存储移动端自带emoji表情的方法(windows版)_第4张图片mysql数据库存储移动端自带emoji表情的方法(windows版)_第5张图片

我就是将上图绿框中的 CHARACTER SET utf8 修改为 CHARACTER SET utf8mb4

也有可能导出的sql语句中没有 CHARACTER SET utf8 的设置,那就添加上

然后将修改好的sql脚本导入,如下图

mysql数据库存储移动端自带emoji表情的方法(windows版)_第6张图片

导入修改好的脚本,你就可以愉快地插入带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;

 

你可能感兴趣的:(mysql数据库存储移动端自带emoji表情的方法(windows版))