zoukankan      html  css  js  c++  java
  • MySQL解决插入emoji表情失败的问题

    •  普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集,这必须要作为移动互联网行业的一个技术选型的要点
    • Mysql 版本的限制,Mysql 5.5.3之前的版本,支持的utf8为3字节的,Mysql 5.5.3之后的版本支持utf8mb4
      • 修改mysql的配置文件,windows下的为my.ini(linux下的为my.cnf),修改的内容都一样
      复制代码
      [client]
      default-character-set = utf8mb4
      
      [mysql]
      default-character-set = utf8mb4
      
      [mysqld]
      character-set-server = utf8mb4
      collation-server = utf8mb4_unicode_ci
      复制代码
      • 将数据库中对应的字段,改为utf8mb4_general_ci

    所以就只能用代码解决了, 一开始是准备从JDBC连接时候就指定使用的字符集处下手.

    jdbc:mysql://localhost:3306/ding?characterEncoding=UTF-8
    

    主要把UTF-8修改为utf8mb4对于的Java Style Charset字符串应该就能解决问题吧?不过很遗憾的是, Java JDBC并不存在utf8mb4对于的字符集. 使用UTF-8的时候可以兼容urf8mb4并自动转换字符集.

    For example, to use 4-byte UTF-8 character sets with Connector/J, configure the MySQL server with character_set_server=utf8mb4, and leave characterEncoding out of the Connector/J connection string. Connector/J will then autodetect the UTF-8 setting. — [MySQL:Using Character Sets and Unicode][3]

    后来科普了一下, 在每一次查询请求的时候, 可以显式的指定使用的字符集, 使用 set names utf8mb4 可以指定本次链接的字符集为utf8mb4, 但这个设置在每次连接被释放后都会失效.

    目前的解决办法是, 在需要插入utf8mb4的时候, 显示地调用执行 set names utf8mb4 , 如:

    jdbcTemplate.execute("set names utf8mb4");
    jdbcTempalte.execute("...");
  • 相关阅读:
    spin_lock & mutex_lock的差别?
    Java拾遗(一):浅析Java子类和父类的实例化顺序 及 陷阱
    Android ViewPager使用具体解释
    大数运算
    fragment 中利用spinner实现省市联动
    秒杀多线程第四篇 一个经典的多线程同步问题
    Ewebeditor最新漏洞及漏洞大全
    轻松设置百度搜索手写输入
    Rational Rose 2007 &Rational Rose 2003 下载及破解方法和汉化文件下载
    svm中的数学和算法
  • 原文地址:https://www.cnblogs.com/netcorner/p/5869294.html
Copyright © 2011-2022 走看看