近日在开发手机app的评论功能时,输入表情文字,保存后提示数据库保存失败。错误日志片段如下
caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x98\x97\xF0\x9F...' for column 'CONTENT' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
 
经过调研发现,这个问题是mysql的utf8编码导致。在mysql中utf8支持3个字节的长度,普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用。这时需要把mysql字符集更改为utf8mb4。(支持4个字节的utf8编码)。这时问题来了,阿里云默认安装的mysql版本是5.1.x,而utf8mb4支持至少需要5.5.3以上的版本。经过一番调研决定将mysql软件版本从5.1.x升级到5.7.x。
 
因为mysql数据库是开发测试环境,考虑到mysql跨多个大版本升级时的复杂度,决定采用先完全删除mysql 5.1后重新安装mysql 5.7的方式来进行。以下是整个卸载并重装mysql的流程。
 
1 查看当前linux版本
     $ cat /proc/version
     Linux version 2.6.32-431.23.3.el6.x86_64 (mockbuild@c6b8.bsys.dev.centos.org) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Thu Jul 31 17:20:51 UTC 2014
 
2 查看当前mysql安装情况
     $ rpm -qa | grep -i mysql
     perl-DBD-MySQL-4.013-3.el6.x86_64
     mysql-5.1.73-5.el6_6.x86_64
     mysql-libs-5.1.73-5.el6_6.x86_64
     mysql-server-5.1.73-5.el6_6.x86_64
 
3 停止mysql服务
     $ /etc/init.d/mysqld stop  
 
4 根据步骤2的输出结果,依次删除以上组件
     $ rpm -ev --nodeps perl-DBD-MySQL-4.013-3.el6.x86_64
     $ rpm -ev --nodeps mysql-5.1.73-5.el6_6.x86_64
     $ rpm -ev --nodeps mysql-libs-5.1.73-5.el6_6.x86_64
     $ rpm -ev --nodeps mysql-server-5.1.73-5.el6_6.x86_64
 
5 删除老版本mysql的开发头文件和库
     $ rm -fr /usr/lib/mysql
     $ rm -fr /usr/include/mysql
     $ rm -fr /usr/include/mysql*
     $ rm -fr  /var/lib/mysql
 
6 确认系统中是否有残留的mysql文件或目录
     $ find / -name mysql*
 
7 从mysql官方下载安装mysql57
     $ su root
     $ sudo rpm -ivh mysql57-community-release-el6-7.noarch.rpm
     $ sudo yum install mysql-server   
 
8 从mysqld_safe启用并设置root用户密码
     $ mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
     $ mysql -u root mysql
     mysql> update user set authentication_string=PASSWORD('XXXX') where user='root';
     mysql> flush privileges;
     mysql> quit
 
9 重启mysql用root用户登录
     $ /etc/init.d/mysqld restart
     $ mysql -u root -p
     mysql> alter password=PASSWORD('XXXX');
     mysql> show variables like '%char%';
     
     默认安装mysql之后,字符集还是utf8。我们需要调整为utf8mb4
 
10 修改my.cnf字符集并重启mysql
     $ vim /etc/my.cnf
     
     $ /etc/init.d/mysqld restart
     $ mysql -u root -p
     mysql> show variables like '%char%';
     
     字符集已经更改为utf8mb4。
 
至此,手机app上评论中输入表情文字保存出错的问题解决!
 

关于阿里云centos 2.6下手机表情输入后无法保存到mysql数据库的问题调研及mysql版本从5.1升级到5.7的全过程纪要的更多相关文章

  1. 阿里云(centos)下svn 服务器搭建

    安装说明 系统环境:阿里云centos安装方式:yum install subversion 检查已安装版本 #检查是否安装了低版本的SVN[root@localhost /]# rpm -qa su ...

  2. 阿里云centos 安装和配置 DokuWiki

    安装 1) 添加虚拟主机:由于我的 阿里云CentOs服务器 安装了oneinstack的一键部署PHP.JAVA.Nginx等环境,所以域名配置很方便,照着文档一步一步做就可以了 cd /root/ ...

  3. 阿里云CentOS搭建系统

    1.在阿里云网站上购买申请服务器. 2.通过Xshell连接服务器,并用root账户登入. 3.配置java开发环境:(也可以使用阿里云一键部署,自动配置并部署服务器) 一.安装jdk 1.查看Lin ...

  4. 阿里云CentOS Linux服务器上搭建邮件服务器遇到的问题

    参考文章: 阿里云CentOS Linux服务器上用postfix搭建邮件服务器 Linux系统下邮件服务器的搭建(Postfix+Dovecot) 本来想自己搭建邮件服务器,但是看到一篇资料表示阿里 ...

  5. [转]阿里云CentOS 7.1使用yum安装MySql5.6.24

    阿里云CentOS 7.1使用yum安装MySql5.6.24 作者:vfhky | 时间:2015-06-25 09:43 | 分类:web 在前面两篇文章<2015博客升级记(四):Cent ...

  6. 阿里云centos中mysql的安装及一些常识知识

    -------------------------------------------------------------------    阿里云centos中mysql的安装 工具WinSCP v ...

  7. 阿里云CentOS自动备份MySql 8.0并上传至七牛云

    本文主要介绍一下阿里云CentOS7下如何对MySql 8.0数据库进行自动备份,并使用.NET Core 将备份文件上传至七牛云存储上,并对整个过程所踩的坑加以记录. 环境.工具.准备工作 服务器: ...

  8. 阿里云Centos 7上面安装mysql教程

    1 软件的基本安装过程 1 卸载已有的mysql 1.查看系统是否安装了mysql软件 rpm -qa|grep -i mysql 2.将已经安装过的软件卸载掉.注意:这样的卸载是不彻底,不过这里够用 ...

  9. 阿里云Centos 7安装MongoDB 4.2.0

    背景:最近公司项目需要将后台接口优化到100ms内.因此需要对接口逻辑,数据优化做处理, 正好使用到了Redis缓存,mysql,mongoDB的优化,今天记录一下在阿里云centos上安装mongo ...

随机推荐

  1. phpcms pc标签 start不生效的原因

    start 和 page 参数不可同时使用,使用了page参数 会造成start 参数无效

  2. windows10(64位)Anaconda3+Python3.6搭建Tensorflow(cpu版本)及keras

    转自:windows10(64位)Anaconda3+Python3.6搭建Tensorflow(cpu版本)及keras 1.本来电脑安装的是anaconda3 5.3.1,但安装的python版本 ...

  3. Win10系统下面的TR1008解决方案

    最近为了体验高大上的Win10系统,于是就把本本原来的Win7旗舰版 升级 到了Win10专业版.之后又在本本上部署了cognos,但是在打开Transform导入IQD数据源的时候就报错了,错误和之 ...

  4. 2. Using 'dp' instead of 'px' to set text size

    android:textSize="45px"  ==> android:textSize="45dp" 因为Android Phone的手机分辨率各不相 ...

  5. easyui combotree模糊查询

    技术交流QQ群:15129679 让EasyUI的combobox和combotree同时支持自定义模糊查询,在不更改其他代码的情况下,添加以下代码就行了: /** * combobox和combot ...

  6. listView下拉刷新加载数据

    这个下拉效果在网上最早的例子恐怕就是Johan Nilsson的实现,http://johannilsson.com/2011/03/13/android-pull-to-refresh-update ...

  7. iOS中ActionSheet和Alert的区别

    首先,样子长得就不一样 看下图:

  8. WebService 之 实例学习一

    新建一个空网站项目,添加新建项 “ Web 服务 ”. 一.WebServiceDemo.asmx 文件,默认内容如下: <%@ WebService Language="C#&quo ...

  9. 使用js对select动态添加和删除OPTION

    <select id="ddlResourceType" onchange="getvalue(this)"> </select> 动态 ...

  10. java8 map flatmap

    map: 对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素.这个方法有三个对于原始类型的变种方法,分别是:mapToInt,mapToLong和ma ...