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

近日在开发手机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 ([email protected]) (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 wget http://repo.mysql.com/mysql57-community-release-el6-7.noarch.rpm

     $ 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上评论中输入表情文字保存出错的问题解决!

时间: 2024-11-19 04:55:33

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

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

安装说明 系统环境:阿里云centos安装方式:yum install subversion 检查已安装版本 #检查是否安装了低版本的SVN[[email protected] /]# rpm -qa subversion #卸载旧版本SVN[[email protected] modules]# yum remove subversion 安装SVN [[email protected] modules]# yum install subversion 确认已安装了svn模块 svn --ve

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

参考文章: 阿里云CentOS Linux服务器上用postfix搭建邮件服务器 Linux系统下邮件服务器的搭建(Postfix+Dovecot) 本来想自己搭建邮件服务器,但是看到一篇资料表示阿里云为了禁止垃圾邮件,禁用了25端口. 可以使用阿里云的邮件推送服务. SMTP之PHP调用示例 email.class.php下载

阿里云CentOS配置全过程

阿里云CentOS配置全过程 拿到服务器的ip.初始密码以后.我们先要用远程连接工具putty连接服务器主机. 启动putty.exe程序,进入putty主界面,在Host Name 栏中输入你的服务器ip地址,Saved Sessions 填入你的主机名称(可自定义,用于区别你的服务器).点击Save保存配置.选中你的服务器名点击open开始连接服务器. 第一次连接,会出现对话框,点击是 出现登录界面,输入用户名,默认为超级用户root,接着输入密码,要注意的是密码不会显示在屏幕上.输入密码时

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

------------------------------------------------------------------- 阿里云centos中mysql的安装 工具WinSCP v5.7.0可以从windows上传文件到linux上 工具putty可以再windows上连接linux,用命令行操作很方便 将mysql以下三个包下载并上传到linux上,例如:/root/software MySQL-server-5.5.28-1.linux2.6.x86_64.rpm MySQL-

阿里云centos 静默安装oracle

Package安装检查 yum -y install binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel glibc glibc-common glibc-devel gcc gcc-c++ libaio-devel libaio libgcc libstdc++ libstdc++-devel make sysstat unixODBC unixODBC-devel pdksh numactl-devel gli

阿里云centos部署apache+php

经过一个下午的尝试,终于完成了阿里云apache+php服务器的搭建,我的数据库用的是阿里云的RDS,不需要在服务器中安装mysql了.在我的服务器中最后部署了phpMyAdmin,测试可以管理RDS上的数据库.服务器的搭建宣布完成.留下了做个记录.下次再部署的话就不用大量的搜索和尝试了. 一.下载Xshell+xftp,安装xftp. 二.Xshell新建连接,服务器的外网IP,用户名:root,密码:连接服务的密码 三.打开刚创建的连接,确保成功连接到服务器 四.因为我没有买数据盘,所以数据

阿里云CentOS搭建系统

准备工作 1.在阿里云网站上购买申请服务器. 2.通过Xshell连接服务器,并用root账户登入. 3.配置java开发环境:(也可以使用阿里云一键部署,自动配置并部署服务器) 安装jdk 1.查看Linux自带的JDK是否已安装 如果出现openjdk,最好还是先卸载掉openjdk,在安装sun公司的jdk. 2.查看jdk信息 3.卸载OpenJDK,执行以下操作: 4.新建java安装目录 5.将之前下载的jdk解压缩并安装 6.在profile文件中加入java环境变量 7.使文件立

阿里云centos配置VPN(PPTPD服务)

因为公司网络访问限制影响,想配置个VPN服务,做其它访问使用,所以找了个外部服务器配置个VPN(PPTPD)服务. 环境:阿里云 centos 6.3 条件:服务器支持ppp[这里必须]和tun/tap[非必须](如需配openvpn必须) 具体安装如下: 1.  需要验证是否开启了ppp,一般只有VPS才需要验证,自己的服务器肯定是开启的. # cat /dev/ppp cat: /dev/ppp: No such device or address 如果出现以上提示则说明ppp是开启的,可以

阿里云CentOS 7.2 MySQL服务启动失败的解决思路

阿里云 CentOS 7.2 MySQL服务启动失败的解决思路 前言 : 昨天刚刚搭建好的MySQL让老大看了一下,经过测试已经完成任务.但是今天早晨来的时候发现服务器被关了,此时我的心情崩溃的,但是我非常冷静的解决了MySQL问题.如下: 启动MySQL服务器失败,如下所示: [[email protected] ~]# /etc/init.d/mysqld start Starting mysqld (via systemctl):  Job for mysqld.service faile