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

    近日在开发手机app的评论功能时,输入表情文字,保存后提示数据库保存失败。错误日志片段如下
    caused by: java.sql.SQLException: Incorrect string value: 'xF0x9Fx98x97xF0x9F...' 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上评论中输入表情文字保存出错的问题解决!
     
  • 相关阅读:
    oo第四次博客
    oo第三次博客
    oo第二次博客
    oo第一次博客
    OO第四次博客
    OO第三次博客总结
    第二次博客总结
    oo第一次博客总结
    oo第四次博客作业
    oo第三次博客作业
  • 原文地址:https://www.cnblogs.com/andrew-xie/p/5267725.html
Copyright © 2011-2022 走看看