页面传来表情然后直接插入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并没有在后续版本中增加对4字节UTF8字符的支持,而是推出了新的UTF8MB4字符集。 在选择字符集时,如果预期数据中可能包含4字节的Unicode字符,应当使用UTF8MB4。对于CHAR类型...
- **更改字段字符集**:如果已有表中的某个字段需要存储emoji表情,可以通过ALTER TABLE命令修改字段的字符集为`utf8mb4`。例如: ```sql ALTER TABLE `article` MODIFY COLUMN `content` MEDIUMTEXT CHARACTER ...
`utf8mb4`是UTF-8的一个超集,它支持四字节的Unicode字符,而普通的`utf8`仅支持三字节的字符,不足以涵盖所有的emoji。 3. **表和列定义**:创建新的表或修改现有表时,需要将表和列的字符集设置为`utf8mb4`。例如...
- 数据库字符集设置:确保MySQL数据库、表以及字段的字符集设定为`utf8mb4`,因为`utf8`只支持部分Unicode,而`utf8mb4`则支持所有Unicode字符,包括emoji。 - PHP连接设置:在连接MySQL时,使用`mysqli_set_...
MySQL默认使用的`utf8`字符集只支持最多3个字节的Unicode字符,而大多数emoji表情符号属于4字节的Unicode范围(UTF-8编码下的U+10000到U+10FFFF)。因此,如果直接使用`utf8`存储,会遇到无法正确保存和读取emoji的...
这是因为MySQL的默认UTF-8字符集(实际上是`utf8`,并非完全标准的UTF-8)仅支持最多3字节的字符,而一些特殊字符,如Emoji,需要4字节的编码空间。这个问题的根本在于MySQL的`utf8`字符集设计时并未考虑到4字节的...
而MySQL数据库默认的utf8字符集只支持每个字符最多三个字节的编码,因此,当尝试将四字节的emoji表情存入只支持三字节的utf8字段时,就会出现错误。 具体来说,报错信息"\xF0\x9F\x8E\x80\xE5\xA4..."是emoji表情的...
而MySQL中的utf8编码只支持最多3个字节的字符,因此当尝试存储4字节的Emoji表情字符时,会导致错误。具体的错误信息是:java.sql.SQLException:Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at ...
mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。但是utf8的超集utf8mb4一个字符最多能有4字节,所以能支持emoji表情的存储。 下面话不多说了,来一起看看详细的...
MySQL 需要支持 emoji 表情符号版本需要大于5.5.3,且字符集需要设置为utf8mb4 字符集。 utf8mb4和utf8到底有什么区别呢?原来以往的mysql的utf8一个字符最多3字节,而utf8mb4则扩展到一个字符最多能有4字节,所以...
2.解决方法:MySQL 5.6版本起,支持新的字符集utf8mb4,这个字符集是utf8的超集,可以存储4个字节的字符,从而可以正确存储Emoji表情。 3.升级MySQL字符集:要存储Emoji表情,需要将MySQL的字符集设置为utf8mb4,这...
emoji表情是一个4字节长度的Unicode字符,而Mysql的默认字符集是utf8,这就导致了存储emoji表情时报错。 解决这个问题的关键是使用正确的字符集,Mysql提供了utf8mb4字符集来支持存储emoji表情。 首先,我们需要...
MySQL的UTF8编码只支持三字节的Unicode字符,而emoji表情需要四字节的UTF8MB4编码。因此,我们需要将数据库的字符集设置为UTF8MB4。在MySQL命令行或者通过工具如Navicat,可以执行以下SQL语句来更改数据库的编码: ...
但3个字节远远不够容纳所有的文字, 所以便有了utf8mb4, utf8mb4是utf8的超集, 占4个字节, 向下兼容utf8. 我们日常用的emoji表情就是4个字节了. 所以在此我们像utf8的数据表插入数据就会报出Incorrect st
utf8mb4是MySQL提供的一个字符集,它能够支持最多四个字节的UTF-8编码,这样就能够兼容emoji表情的编码。如果MySQL的版本是5.5.3或以上,可以直接将原来的utf8字符集升级为utf8mb4字符集。升级到utf8mb4字符集几乎...
总结来说,MySQL无法存储Emoji表情的原因主要是字符集设置不支持四字节UTF-8字符。通过修改配置文件中的字符集设置、重启MySQL服务,以及调整数据库表和字段的字符集,可以有效地解决这一问题。 除了上述内容外,...
在 MySQL 数据库中,默认的编码方式为 utf8,但是 utf8 编码只支持最多 3 字节的数据,而 emoji 表情字符是 4 字节的字符。如果直接往采用 utf-8 编码的数据库中插入表情数据,Java 程序中将报 SQL 异常。为了解决这...