近日在开发手机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. [LeetCode] Distinct Subsequences [29]

    题目 Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequen ...

  2. Compiling LIBFFM On OSX 10.9

    原文:http://blog.josephmisiti.com/compiling-libffm-on-osx-10.9/ I recently tried to compile LIBFFM (Fi ...

  3. [Algorithm] Universal Value Tree Problem

    A unival tree (which stands for "universal value") is a tree where all nodes under it have ...

  4. 内有干货!2个人3个月怎样从零完毕一款社区App《林卡》

    嘿,大家好.我是不灭的小灯灯,我赌5毛你没听说过我的名字... 好啦.这篇不是鸡汤,是经验吐槽.干货分享! 所以乱七八糟的就不多说了.直接切入正题. 先说下自己的情况背景,眼下尚未毕业.非计算机专业, ...

  5. Java8新特性 - Lambda表达式 - 基本知识

    A lambda expression is an unnamed block of code (or an unnamed function) with a list of formal param ...

  6. ORACLE常用监控语句(未完待续)

    --查询日志的切换频率 select  t1.RECID as srecid        ,t2.RECID as erecid        ,t1.FIRST_TIME as stime     ...

  7. UIKeyboardTypeNumberPad 数字键盘添加完成按钮

    一:添加通知 //数字键盘添加完成 [[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(keyboardWi ...

  8. [转]查看linux服务器硬盘IO读写负载

    最近一台linux服务器出现异常,系统反映很慢,相应的应用程序也无法反映,而且还出现死机的情况,经过几天的观察了解,发现服务器压力很大,主要的压力来自硬盘的IO访问已经达到100% 为了方便各位和自己 ...

  9. 算法笔记_197:历届试题 带分数(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. ...

  10. ios上线流程

    一.前言: 作为一名iOSer,把开发出来的App上传到App Store是必要的.下面就来详细讲解一下具体流程步骤. 二.准备: 一个已付费的开发者账号(账号类型分为个人(Individual).公 ...