关于后台接收并存储移动端自带emoji的详细方法(mysql数据库)

来源:互联网 发布:华为java上机编程题 编辑:程序博客网 时间:2024/06/07 06:14

关于后台接收并存储移动端自带emoji的方法(mysql数据库)

本文章主要记录我在处理后台接收移动端自带emoji时候遇到的问题以及解决方法。本文章为博主一字一句自打成文,如存在相关侵权问题,请联系博主,谢谢。

  • 前言
  • 第一步:下载mysql数据库
  • 第二步:下载mysql-connector-java.jar驱动包
  • 第三步:安装mysql数据库
  • 第四步:修改mysql数据库相关文件(my.ini)
  • 第五步:修改数据库、数据库表和表内字段的编码
  • 第六步:修改数据驱动连接

前言

本人在Window7 64位,java 1.7,myeclipse 9.0+的环境下进行开发。
数据库的管理软件是使用SQLyog 10.2的管理工具。

本人刚开始处理移动端传送包含emoji表情的字符串时,出现了各种的乱码、程序奔溃等问题。其原因是以往旧版本的mysql只支持3个字节的字符串存储,而我们的emoji表情为4个字节,这就导致我们在将包含emoji表情的字符串插入到mysql数据库中时出现问题。但是如果在程序在移动端中增加一个字节转换的小程序的话,会消耗大量的开发时间和资源,也不方便日后的维护,所以最好的解决方法是使mysql支持4个字节的emoji表情的存储。mysql发展到现在已经出现了一种支持4个字节的字符串编码新格式——utf8mb4,该编码格式兼容了传统的utf-8的编码格式,而且还支持存储4个字节的emoji表情字符串,所以我们在以下将会将数据库相关的编码从原本的utf8修改成utf8mb4格式。

这种修改方式改动的地方很少,只要修改一下与数据库相关的地方就可以了。也就是说,程序和前端之间原本都是采用utf8来接收和发送数据的,那么都不用进行修改,维持原来的utf8编码格式。

但本人有个问题:前端和后台之间的接收和发送使用的utf8格式,但是到数据库却是依旧可以使用utf8mb4格式进行存储呢?按道理,字符串在传送时就应该是utf8的编码格式,这就不是我们需要的utf8mb4格式了,但是字符串却没有乱码,表情也能在前端好好的显示。如果有哪位大神知道的,请指教一下,谢谢。

因而需要使用支持4字节的mysql版本为:5.5.3+(最低支持4字节版本)。同时需要升级相关数据库驱动包(mysql-connectot-java.jar)的版本:5.1.13+。

以下是我在升级项目的时候操作方法:

第一步:下载mysql数据库

mysql数据库最底要在5.5.3版本以上,本人在升级时就是下载最新的5.7.17版本
以下附上下载链接:https://dev.mysql.com/downloads/installer/

官网下载方式的步骤可参考:http://jingyan.baidu.com/article/ceb9fb10b77bba8cad2ba09a.html

第二步:下载mysql-connector-java.jar驱动包

mysql-connector-java.jar驱动包最低要在5.1.13版本以上,而本人在升级时是下载的最新的5.1.40版本。
以下附上下载链接:https://dev.mysql.com/downloads/connector/j/

官网下载方式的步骤可参考:http://blog.csdn.net/u010523770/article/details/52240946

第三步:安装mysql数据库

到该步骤,如果原本有旧版本的mysql数据库,请先卸载完全后再进行重装。
完全卸载方式可参考:http://jingyan.baidu.com/article/f96699bbaa8fc1894f3c1b5a.html

相关安装步骤其实网上一大推,只要搜索一下如何安装mysql数据库就有了
以下链接只提供参考:http://www.jb51.net/article/39188.htm

在安装完数据库之后,我们先来测试一下localhost是否可以连接到我们的数据库:
这里写图片描述

再者,测试一下ip地址的远程连接方式:
这里写图片描述

注意:如果localhost测试中能连接数据库,但是在远程测试中出现:Access denied for user ‘root’@‘localhost’(using password:YES)的话,就是你的数据库不允许远程连接,所以你需要设置一下。设置方法:
1、打开cmd命令行终端
2、进入mysql数据库(这需要配置环境变量,或是进入到mysql的根目录中的bin文件夹中)
3、输入grant all privileges on *.* to ‘root’@’%’ identified by ‘(这里添你的数据库密码)’ with grant option;

结果如下:
这里写图片描述

此时应该就可以进行远程连接数据库了。

第四步:修改mysql数据库相关文件(my.ini)

我们把数据库升级完成之后,还要对程序访问数据库的编码进行修改才行,要不然,程序在插入emoji表情的时候会报出来自数据库的以下错误:

ERROR JDBCExceptionReporter:101 - Incorrect string value: ‘\xF0\x9F\x98\x8A\xF0\x9F…’ for column ‘content’ at row 1

Caused by: java.sql.BatchUpdateException: Incorrect string value: ‘\xF0\x9F\x98\x8A\xF0\x9F…’ for column ‘content’ at row 1

Caused by: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x98\x8A\xF0\x9F…’ for column ‘content’ at row 1

该系列错误的报出,就是因为数据库被访问时的一个编码错误,所以我们需要修改一下相关的数据库被访问的编码。方法如下:

mysql数据库的目录默认是在:C:\ProgramData\MySQL\MySQL Server 5.7目录下。
找到my.ini文件,使用记事本方式打开,修改以下几项:
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,所以必须要对字段进行编码修改。

修改方式有两种,一种是通过命令行的方式,另一种是使用数据库管理软件进行修改的,在此我就只写在管理软件中修改的方式就好,步骤如下:
1、修改数据库编码为utf8mb4(只要在数据库管理软件中设置就可以了,这里就不附上了);
2、修改数据库表编码为utf8mb4(只要在数据库管理软件中设置就可以了,这里就不附上了);
3、修改字段方式:

->导出数据库的**结构以及数据**到sql文件中->记事本打开导出的sql文件->使用替换功能全局将CHARACTER SET utf8mb4替换成CHARACTER SET utf8(这一步,是先将数据库和数据表的编码都替换成utf8mb4,因为原本的utf8mb4中就包含了utf8几个字,如果直接替换成utf8mb4的话,会发现数据库以及数据表的编码格式变成了:CHARACTER SET utf8mb4mb4,此时就多了一个mb4出来)->再次使用替换功能将CHARACTER SET utf8替换成CHARACTER SET utf8mb4->最后保存,将新的sql文件从新导入到数据库中

第六步:修改数据驱动连接

最后一步就是将数据库的连接(jdbc:mysql://localhost:3306/test?characterEncoding=utf8)中的utf8编码连接去掉。即修改后的结果为:jdbc:mysql://localhost:3306/test

以上六步完成,重启项目程序,估计测试emoji表情的发送是没有问题了。

转载请注明出处:http://blog.csdn.net/qq_24247249/article/details/59648165

0 0
原创粉丝点击