zoukankan      html  css  js  c++  java
  • mysql 微信用户昵称emoji 完整保存

    微信用户昵称现在丰富多样,一些个性的名称中经常包含有特殊字符,以及emoji表情。起先,我总以为MySQL只能保存纯文本数据。但其实mysql(5.7版本)已非常强大,完整保存微信用户昵称(emoji表情)已不在话下。

    起先,我的项目是无法保存这些含有emoji表情的昵称。为了鲜明的对比前后我做出的调整,先来看看之前的状况。

    1.mysql表字段定义

    `third_name` varchar(255) CHARACTER SET utf8 DEFAULT NULL COMMENT '用户第三方账号昵称',
     

    字段类型为utf8

    2.mysql数据库连接字符串

    <!-- Connection Info -->
    <property name="url" value="${url}?useUnicode=true&amp;characterEncoding=utf8&amp;" />
    jdbc连接使用的编码格式也为utf8

    3.微信昵称

    这里写图片描述

    这昵称中有emoji表情的小眼睛在瞅着我。

    4.保存出错

    Caused by: java.sql.SQLException: Incorrect string value: 'xF0x9Fx91x80xE5xBC...' for column 'third_name' at row 1
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
     

    接下来,我们看一下可以保存后的调整。

    ①、mysql表字段定义为utf8mb4

    `third_name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL COMMENT '用户第三方账号昵称',
     

    注意改成了“utf8mb4”,不再是utf8,主要是支持的字节数不同。

    MySQL在5.5.3版本之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode。其实,utf8mb4是utf8的超集,理论上原来使用utf8,然后将字符集修改为utf8mb4,也会不会对已有的utf8编码读取产生任何问题。当然,为了节省空间,一般情况下使用utf8也就够了。 
    想要了解的更多,请参照浅谈MySQL中utf8和utf8mb4的区别

    ②.mysql数据库连接字符串去掉编码方式,假如不行,那就把编码改成utf8mb4也可以的

    <!-- Connection Info -->
    <property name="url" value="${url}" />
     

    ③.保存后效果

    使用Navicat查看的效果如下:

    这里写图片描述

    网页上效果如下,小眼睛可以正常显示:

    这里写图片描述

  • 相关阅读:
    JS中的一些遍历方法
    JS中关于引用类型数据及函数的参数传递
    JS中关于数组的操作
    CSS中的一些伪类
    JS中的回调函数
    JS中关于构造函数、原型链、prototype、constructor、instanceof、__proto__属性
    JDK的安装及环境变量配置
    JS中的this指针
    JS中的数据类型
    Word中页码及目录、参考文献的制做方法
  • 原文地址:https://www.cnblogs.com/tdalcn/p/7220802.html
Copyright © 2011-2022 走看看