`

让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表情实例

    `utf8mb4`是UTF-8的一个超集,它支持四字节的Unicode字符,而普通的`utf8`仅支持三字节的字符,不足以涵盖所有的emoji。 3. **表和列定义**:创建新的表或修改现有表时,需要将表和列的字符集设置为`utf8mb4`。例如...

    全面了解mysql中utf8和utf8mb4的区别

    为保持向后兼容并考虑到存储效率,MySQL并没有在后续版本中增加对4字节UTF8字符的支持,而是推出了新的UTF8MB4字符集。 在选择字符集时,如果预期数据中可能包含4字节的Unicode字符,应当使用UTF8MB4。对于CHAR类型...

    emoji入库mysql注意事项除了更改utf8mb4最大的坑在这里

    - **更改字段字符集**:如果已有表中的某个字段需要存储emoji表情,可以通过ALTER TABLE命令修改字段的字符集为`utf8mb4`。例如: ```sql ALTER TABLE `article` MODIFY COLUMN `content` MEDIUMTEXT CHARACTER ...

    php 处理APP emoji表情包 IOS表情包 Mysql保存手机表情

    - 数据库字符集设置:确保MySQL数据库、表以及字段的字符集设定为`utf8mb4`,因为`utf8`只支持部分Unicode,而`utf8mb4`则支持所有Unicode字符,包括emoji。 - PHP连接设置:在连接MySQL时,使用`mysqli_set_...

    emoji表情符号mysql插入与读取

    MySQL默认使用的`utf8`字符集只支持最多3个字节的Unicode字符,而大多数emoji表情符号属于4字节的Unicode范围(UTF-8编码下的U+10000到U+10FFFF)。因此,如果直接使用`utf8`存储,会遇到无法正确保存和读取emoji的...

    java ipone 微信昵称emoji表情保存失败 问题解决

    而MySQL数据库默认的utf8字符集只支持每个字符最多三个字节的编码,因此,当尝试将四字节的emoji表情存入只支持三字节的utf8字段时,就会出现错误。 具体来说,报错信息"\xF0\x9F\x8E\x80\xE5\xA4..."是emoji表情的...

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

    而MySQL中的utf8编码只支持最多3个字节的字符,因此当尝试存储4字节的Emoji表情字符时,会导致错误。具体的错误信息是:java.sql.SQLException:Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at ...

    使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保存微信昵称特殊字符的方法

    这是因为MySQL的默认UTF-8字符集(实际上是`utf8`,并非完全标准的UTF-8)仅支持最多3字节的字符,而一些特殊字符,如Emoji,需要4字节的编码空间。这个问题的根本在于MySQL的`utf8`字符集设计时并未考虑到4字节的...

    mysql存储emoji表情步骤详解

    2.解决方法:MySQL 5.6版本起,支持新的字符集utf8mb4,这个字符集是utf8的超集,可以存储4个字节的字符,从而可以正确存储Emoji表情。 3.升级MySQL字符集:要存储Emoji表情,需要将MySQL的字符集设置为utf8mb4,这...

    MySQL无法存储emoji表情解决方案分析

    MySQL的UTF8编码只支持三字节的Unicode字符,而emoji表情需要四字节的UTF8MB4编码。因此,我们需要将数据库的字符集设置为UTF8MB4。在MySQL命令行或者通过工具如Navicat,可以执行以下SQL语句来更改数据库的编码: ...

    详解JDBC对Mysql utf8mb4字符集的处理

    emoji表情是一个4字节长度的Unicode字符,而Mysql的默认字符集是utf8,这就导致了存储emoji表情时报错。 解决这个问题的关键是使用正确的字符集,Mysql提供了utf8mb4字符集来支持存储emoji表情。 首先,我们需要...

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

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

    MySQL无法存储Emoji表情问题的解决方法分析

    总结来说,MySQL无法存储Emoji表情的原因主要是字符集设置不支持四字节UTF-8字符。通过修改配置文件中的字符集设置、重启MySQL服务,以及调整数据库表和字段的字符集,可以有效地解决这一问题。 除了上述内容外,...

    更改MySQL数据库的编码为utf8mb4_wo.pdf

    在 MySQL 数据库中,默认的编码方式为 utf8,但是 utf8 编码只支持最多 3 字节的数据,而 emoji 表情字符是 4 字节的字符。如果直接往采用 utf-8 编码的数据库中插入表情数据,Java 程序中将报 SQL 异常。为了解决这...

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

    utf8mb4是UTF8的一个扩展,专门为了容纳4字节的字符(包括emoji)而设计,它完全兼容原来的3字节UTF8字符,所以升级后不会影响已有数据的显示。虽然这会导致数据库占用的空间稍有增加,但根据测试,性能上的影响可以...

Global site tag (gtag.js) - Google Analytics