有一个项目需要存储ios的表情(emoji表情)
这种表情虽然是utf8编码,但是一个字符需要占用4个字节,而MySQL utf8编码只能存放3字节的字符。
在MySQL 5.6中,可以设置编码为utf8mb4,这个字符集是utf8的超集。
1.使用低版本的mysqljar会连接出错
换成 5.1.6

2.
因为JDBC驱动并不支持utf8mb4字符集,所以不能设置JDBC URL的characterEncoding


不过还有三种方式可以设置字符集
1.不显式设置字符集,继承服务器的配置

2.在执行SQL之前,运行set names 的查询  (Query方式)


3.设置MySQL init_connect参数


经过测试各种因素的结果如下所示:
 
JDBC版本
普通中文
苹果表情
服务器utf8编码
5.1.6    
正常
插入报错
 
5.1.6  Query
正常
正常
 
5.1.6  init_connect
正常
插入报错
 
5.1.31
正常
插入报错
 
5.1.31 Query
正常
正常
 
5.1.31 init_connect
正常
插入报错
服务器utf8mb4编码
5.1.6
乱码
乱码
 
5.1.6  Query
乱码
乱码
 
5.1.6  init_connect
乱码
乱码
 
5.1.31
正常
正常
 
5.1.31 Query
正常
正常
 
5.1.31 init_connect
正常
正常
 

总结:
1.修改了character_set_server参数,需要重启数据库
2.使用高版本的JDBC


mysql utf8mb4 所引起的问题的更多相关文章

  1. mysql : utf8mb4 的问题

    微信呢称和QQ呢称上有很多火星文和emoji表情图片,这些数据,如果直接insert到mysql数据库,一般会报错,设置成utf8都不好使,必须改成utf8mb4编码,这二者的区别见: mysql u ...

  2. mysql utf8mb4

    遇到的问题 有一个项目需要存储 emoji 表情.另外极少数中文在存储的时候也遇到 utf8 编码格式的数据库在储存时报错. Rails creating schema_migrations - My ...

  3. mysql utf8mb4与emoji表情

    一 什么是Emoji emoji就是表情符号:词义来自日语(えもじ,e-moji,moji在日语中的含义是字符) 表情符号现已普遍应用于手机短信和网络聊天软件. emoji表情符号,在外国的手机短信里 ...

  4. 字符集UTF-8MB4 MySQL utf8mb4 字符集,用于存储emoji表情

    字符集UTF-8MB4 utf8mb4兼容utf8,且比utf8能表示更多的字符.看unicode编码区从1 - 126就属于传统utf8区,当然utf8mb4也兼容这个区,126行以下就是utf8m ...

  5. mysql utf8mb4 设置

    [mysqld]collation-server=utf8mb4_general_ciinit-connect='SET NAMES utf8mb4'character-set-server=utf8 ...

  6. 关于MySQL utf8mb4 字符集中字符串长度的问题

    MySQL之前推出的utf8字符集中,一个汉字占3个字节,新的utf8mb4字符集中一个汉字占4个字节. 那么我们平时建表的时候输入的varchar=16这种,到底指的是字符长度还是字节长度? 如果是 ...

  7. JDBC对Mysql utf8mb4字符集的处理

    写在前面 在开发微信小程序的时候,评论服务模块希望添加上emoji表情,但是emoji表情是4个字节长度的,所以需要进行设置 当前项目是JAVA编写, 使用JDBC连接操作数据库, 如下针对的JDBC ...

  8. Mysql UTF-8mb4字符集的问题

    官方Mysql手册链接 https://dev.mysql.com/doc/connectors/en/connector-j-reference-charsets.html Notes For Co ...

  9. scala slick mysql utf8mb4 支持

    语言  scala sql包  slick 3.2.0 数据库  mysql https://stackoverflow.com/questions/36741141/scala-slick-jdbc ...

随机推荐

  1. Unable to read TLD "META-INF/c.tld" from JAR file

      Unable to read TLD "META-INF/c.tld" from JAR file CreationTime--2018年7月18日17点46分 Author: ...

  2. JProfiler 解决 Java 服务器的性能跟踪

    作者:徐建祥(netpirate@gmail.com) 时间: 2006/01/05 来自:http://www.anymobile.org 1.摘要......................... ...

  3. Drupal的$messages是怎么显示的?

    Drupal的默认主题bartik会在页面顶部显示系统信息,例如警告.状态等.这个过程是如何实现的? 首先,在bartik目录下找到page.tpl.php,这是bartik主题的页面显示模板.其中有 ...

  4. Integer 内部实现

    public static void main(String[] args) { Integer in1 = 128; Integer in2 = 128; System.out.println(in ...

  5. HDUOJ----(4706)Children's Day

    Children's Day Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  6. Foundations of Machine Learning: Boosting

    Foundations of Machine Learning: Boosting Boosting是属于自适应基函数(Adaptive basis-function Model(ABM))中的一种模 ...

  7. ubuntu 安装php-redis

    sudo apt-get install redis-server 测试redis是否安装成功:注意:要开启redisredis-cliset test helloOKget test"ba ...

  8. 转 Python标准库01 正则表达式 (re包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我将从正则表达式开始讲Python的标准库.正则表达式是文字处理中常用的工具,而且 ...

  9. Linux vm运行参数 - OOM相关的参数

    一.前言 本文是描述Linux virtual memory运行参数的第二篇,主要是讲OOM相关的参数的.为了理解OOM参数,第二章简单的描述什么是OOM.如果这个名词对你毫无压力,你可以直接进入第三 ...

  10. Ext4文件系统架构分析(三)

    ioctl源码分析之交换两个文件的物理extents 1. 交换两个文件的extents Ext4 的EXT4_IOC_MOVE_EXT命令用于交换两个文件的extents,实际上是交换两个文件的对应 ...