`

让MySql支持Emoji表情(MySQL中4字节utf8字符保存方法)

阅读更多

页面传来表情然后直接插入Emoji表情,保存到数据库时报错:

 

Caused by: java.sql.SQLException: Incorrect string value: '\xFE\xDD\xK8\x8U' for column 'review' at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4096)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4028)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2490)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2651)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2734)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2155)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2458)

 经检查原因:

 

UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。

解决方案:将Mysql的编码从utf8转换成utf8mb4。

 

1. 修改my.ini [mysqld] character-set-server=utf8mb4 2. 在Connector/J的连接参数中,不要加characterEncoding参数。 不加这个参数时,默认值就时autodetect。 3. 将已经建好的表也转换成utf8mb4
命令:ALTER TABLE `TABLE_NAME` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; (将TABLE_NAME替换成你的表名) 4. 将需要使用emoji的字段设置类型为:
命令:ALTER TABLE `TABLE_NAME`MODIFY COLUMN `COLUMN_NAME` text CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

我个人设置后还是报错,这个时候你得重启一下数据库了,/etc/rc.d/init.d/mysql restart重启数据库

我个人在配置my.cnf文件中mysqld下面加了四行:

character-set-client-handshake = FALSE

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

init_connect='SET NAMES utf8mb4'

 完事后执行sql语句SHOW VARIABLES LIKE 'character_set_%';

显示database跟server两项都变为utf8mb4就可以了

 
分享到:
评论

相关推荐

    使MySQL能够存储emoji表情字符的设置教程

    MySQL 需要支持 emoji 表情符号版本需要大于5.5.3,且字符集需要设置为utf8mb4 字符集。 utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节,而utf8mb4则扩展到一个字符最多能有4字节,所以...

    mysql中插入emoji表情失败的原因与解决

    mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。但是utf8的超集utf8mb4一个字符最多能有4字节,所以能支持emoji表情的存储。 下面话不多说了,来一起看看详细的...

    mysql存储emoji表情报错的处理方法【更改编码为utf8mb4】

    utf-8编码可能2个字节、3个字节、4个字节的字符,但是MySQL的utf8编码只支持3字节的数据,而移动端的表情数据是4个字节的字符。如果直接往采用utf-8编码的数据库中插入表情数据,Java程序中将报SQL异常: java.sql....

    emoji表情符号mysql插入与读取

    emoji表情符号存放数据库需要数据库支持4个字节的数据格式,而mysql默认的utf8只能存储3个字节,所以需要mysql版本5.6及以上,并设置数据库为utf8mb4字符集

    mysql存储emoji表情步骤详解

    ios的表情(emoji表情),这种表情虽然是utf8编码,但是一个字符需要占用4个字节,而MySQL utf8编码只能存放3字节的字符。在MySQL 5.6中,可以设置编码为utf8mb4,这个字符集是utf8的超集。 1、修改MYSQL字符集 Mysql...

    MySQL插入emoji表情失败问题的解决方法

    但3个字节远远不够容纳所有的文字, 所以便有了utf8mb4, utf8mb4是utf8的超集, 占4个字节, 向下兼容utf8. 我们日常用的emoji表情就是4个字节了. 所以在此我们像utf8的数据表插入数据就会报出Incorrect st

    3种方法轻松处理php开发中emoji表情的问题

    背景 做微信开发的时候就会发现,存储微信昵称必不可少。 可这万恶的微信支持emoji表情做昵称,这就有点蛋疼了 一般Mysql表设计时,都是用...这种4字节的utf8编码可完美兼容旧的3字节utf8字符集,并且可以直接存储emoj

    MySQL 编码utf8 与 utf8mb4 utf8mb4_unicode_ci 与 utf8mb4_general_ci

    参考:mysql字符集小结 utf8mb4 已成为 MySQL ...当遇到占4个字节的 UTF-8 编码,例如 emoji 字符或者复杂的汉字,会导致存储异常。 从 5.5.3 开始,MySQL 开始用 utf8mb4 编码来实现完整的 UTF-8,其中 mb4 表示 most

    设置mysql5.7编码集为utf8mb4的方法

    移动端的表情或者一些emoji是4字节的,但是utf-8是3字节的,这篇文章主要介绍了设置mysql5.7编码集为utf8mb4的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    mysql/Java服务端对emoji的支持与问题解决方法详解

    本文实例讲述了mysql Java服务端对emoji的支持与问题解决方法。分享给大家供大家参考,具体如下: ... MYSQL 5.5 之前, utf8 编码只支持1~3个字节,即BMP这部分的unicode编码区(基本就是0000~FFFF这一区)。

    为何不要在MySQL中使用UTF-8编码方式详解

    MySQL的UTF-8只支持每个字符最多三个字节,而真正的 UTF-8 是每个字符最多四个字节。 问题复现 有数据库表如下:utf8编码方式 往数据库存一条记录: @Test public void testInsert() { User user = new User()...

    iOS_Emoji:适用于iOS的表情符号

    由于server一开始并不支持emoji,现在你post含有emoji的数据到server,server会出现异常,主要是server的mysql开始的时候没有定义4位的字段,varchar都是3位的(普通的字符串或者表情都是占位3个字节,所以utf8足够用...

    微信昵称带符号导致插入MySQL数据库时出错的解决方案

    Mysql的utf8编码最多3个字节,而Emoji表情或者某些特殊字符是4个字节。 因此会导致带有表情的昵称插入数据库时出错。 只要修改MySQL的编码即可,解决方案如下: 1.在mysql的安装目录下找到my.ini,作如下修改: ...

    Incorrect string value: ‘\xF0\x9F\x8C\xB7’ for column ‘nickname’修改mysql某列的编码格式

    Emoji表情或者某些特殊字符是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不进去。 Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8C\xB7' for column 'nickname' at row 1 解决方案 ...

    MySQL存储表情时报错:java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x0A…’的解决方法

    前言 本文主要介绍了关于MySQL存储表情报错:java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x92\xA9\x0D\x0A…’的相关解决方法,分享出供大家参考学习,下面话...普通字符最多占用3个字节,使用utf8足够

    morphoji:PHP表情符号转换器

    莫福吉 Morphoji是一个很小PHP库变身EM的Unicode字符王子 :hugging_face: 进入Latin... 尝试将这些表情符号(和其他4个字节的字符)存储在MySQL utf8表中将导致这些字符无声地丢失。utf8mb4 当然,对此有系统的解决方案

Global site tag (gtag.js) - Google Analytics