近日在开发手机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. 锐浪报表 导出 PDF ANSI码 乱码 问题解决

    锐浪 报表 导出PDF时如果 ANSI 码 打勾了会乱码,能将这个选项默认不打勾吗 //在报表导出事件脚本里写脚本,可实现导出控制Sender.AsE2PDFOption.AnsiTextMode=0 ...

  2. mssql2008R2 RCU-6083:ALTER database FWC SET READ_COMMITTED_SNAPSHOT ON

    RCU-6083:失败 - 检查所选组件的先决条件要求:MDS 有关详细资料, 请参阅 E:\Setup\ofm_rcu\rcu\log\logdir.2014-11-27_12-39\rcu.log ...

  3. (算法)前K大的和

    题目: 1.有两个数组A和B,每个数组有k个数,从两个数组中各取一个数加起来可以组成k*k个和,求这些和中的前k大. 2.有N个数组,每个数组有k个数,从N个数组中各取一个数加起来可以组成k^N个和, ...

  4. 隐马尔可夫模型HMM与维特比Veterbi算法(二)

    隐马尔可夫模型HMM与维特比Veterbi算法(二) 主要内容: 前向算法(Forward Algorithm) 穷举搜索( Exhaustive search for solution) 使用递归降 ...

  5. UVA 10026 Shoemaker's Problem 鞋匠的难题 贪心+排序

    题意:鞋匠一口气接到了不少生意,但是做鞋需要时间,鞋匠只能一双一双地做,根据协议每笔生意如果拖延了要罚钱. 给出每笔生意需要的天数和每天的罚钱数,求出最小罚钱的排列顺序. 只要按罚款/天数去从大到小排 ...

  6. Java AES 加密工具类

    package com.microwisdom.utils; import java.security.NoSuchAlgorithmException; import java.security.S ...

  7. Flume wasn't able to parse timestamp header

    来自:http://caiguangguang.blog.51cto.com/1652935/1384187 flume bucketpath的bug一例 测试的配置文件: 1 2 3 4 5 6 7 ...

  8. Memcache and Mongodb

    转自:http://www.cnblogs.com/lovecindywang/archive/2010/05/19/1739025.html 先说说自己对Memcache和Mongodb的一些看法. ...

  9. iOS Dev (50)用代码实现图片加圆角

    用代码实现图片加圆角:       iconView.layer.masksToBounds = YES;       iconView.;

  10. MySQL事务控制语句(学习笔记)

    MySQL事务控制语句(学习笔记) MySQL事务控制语句         在mysql命令行的默认下,事务都是自动提交的,sql语句提交后马上会执行commit操作.因此开启一个事务必须使用begi ...