相关文章推荐
胆小的毛衣  ·  C 语言 ...·  1 年前    · 
强悍的柚子  ·  Python: ...·  1 年前    · 

mysql存储emoji表情的时候,就会报错,如下:

Error updating database. Cause: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x98\x8A\xF0\x9F…’ for column ‘这是我表中的字段’ at row 1

初步定位是我的数据库是utf8编码,不支持emoji表情,需要改成utf8mb4编码

具体原因:

emoji表情需要4个字节存储
mysql的utf8编码的一个字符最多3个字节,所以不够了就报错

1.mysql将字符集 utf8改utf8mb4:

ALTER TABLE 你的表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

2.修改数据源配置
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	<property name="url" value="${mysql.url}" />
	<property name="username" value="${mysql.user}" />
	<property name="password" value="${mysql.password}" />
	<!-- 设置编码,支持表情存储-->
	<property name="connectionInitSqls" value="set names utf8mb4;"/>
</bean>

1、mysql编码:utf8和utf8mb4的区别:

看官网文档:https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html

utf8mb4: A UTF-8 encoding of the Unicode character set using one to four bytes per character.
utf8mb4: Unicode字符集的UTF-8编码,每个字符使用1到4个字节。
utf8mb3: A UTF-8 encoding of the Unicode character set using one to three bytes per character.
utf8mb3: Unicode字符集的UTF-8编码,每个字符使用一到三个字节。
utf8: An alias for utf8mb3.
utf8: utf8mb3的别名。

UTF-8是使用1~4个字节,一种变长的编码格式。
MySQL中的utf8是utfmb3,只有三个字节,节省空间但不能表达全部的UTF-8,只能支持“基本多文种平面”(Basic Multilingual Plane,BMP)。

总结:编码一般都使用utf8mb4。

utf8扩展,除了mb3,mb4,还有以下:

ucs2: The UCS-2 encoding of the Unicode character set using two bytes per character.
ucs2: Unicode字符集的UCS-2编码,每个字符使用两个字节。
utf16: The UTF-16 encoding for the Unicode character set using two or four bytes per character. Like ucs2 but with an extension for supplementary characters.
utf16: Unicode字符集的UTF-16编码,每个字符使用两个或四个字节。就像ucs2一样,但是有一个补充字符的扩展。
utf16le: The UTF-16LE encoding for the Unicode character set. Like utf16 but little-endian rather than big-endian.
utf16le: Unicode字符集的UTF-16LE编码。类似于utf16,但是是little-endian(小端)而不是big-endian(大端)。
utf32: The UTF-32 encoding for the Unicode character set using four bytes per character.
utf32: Unicode字符集的UTF-32编码,每个字符使用四个字节。

2、mysql排序:utf8_bin和utf8_general_ci和utf8_unicode_ci的区别

ci是 case insensitive, 即 “大小写不敏感”, a 和 A 会在字符判断中会被当做成一样的;
bin 是二进制, a 和 A 会别区别对待.
utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法,一些字符还是不能支持。
SELECT * FROM user WHERE name = 'a’查询时,
使用utf8_bin排序就找不到name = 'A’的那行
使用utf8_general_ci排序就能找到name = 'A’的那行

整理:utf8_bin区分大小写,utf8_unicode_ci比较准确,utf8_general_ci速度比较快。通常情况下 utf8_general_ci的准确性也够我们用的了

总结:排序一般都使用utf8_general_ci

用户昵称中存在emoji表情,调用jdbc往mysql数据库插入的时候抛出异常 java.sql.SQLException: Incorrect string value: '\xF0\x9F\x90\x9B' mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。但是utf8的超集utf8mb4一个字符最多能有4字节,所以能支持emoji表情的存储。 下面话不多说了,来一起看看详细的介绍吧 一. 修改database、table、column字符集 修改database字符集 需要在MySql数据库中存储emoji表情,但发现数据库报错。 由于最初新建数据库的时候采用了utf8编码方式,在mysql中这种编码方式每个字符使用3个字节编码,而emoji符合由4个字节表示,所以就无法存储了。 将Mysql数据库和表的编码方式改成utf8mb4,其最大可以使用4个字节编码字符,所以可以编码emoji符号 具体实... 一、问题及原因 APP产品想对Emoji进行支持,但发现mysql数据库无法写入表情。原因是我们的mysql数据库默认用的是utf8编码,utf8编码存储时用的是三个字节,但Emoji表情是4个字节,所以导致了数据插入异常。 原因找到了就很好办,mysql5.5.3之后的版本支持utf8mb4编码,这种编码是utf8的升级版,用的是4个字节进行存储。所以需要做的就是把mysql字符集从utf8... MySQL可以直接使用字符串存储emoji。但是需要注意的,utf8 编码是不行的,MySQL中的utf8是阉割版的 utf8,它最多只用 3 个字节存储字符,所以存储不了表情。那该怎么办?需要使用utf8mb4编码。 教程所示图片使用的是 github 仓库图片,网速过慢的朋友请移步>>> (原文)Mysql 支持 emoji 表情。更多讨论或者错误提交,也请移步。1. 前言最近为博客添加了Valine评论系统,因为它用的Leancloud的数据库,所以打算写个程序定时爬下来新的数据,并且存到自己的数据库中(_毕竟在自己手中才是最安全的_)。因为评论里面有emoji表情,所以需要数据库支持ut... 本文实例讲述了MySQL无法存储emoji表情解决方案。分享给大家供大家参考,具体如下: 今天学习爬虫爬伯乐在线的文章,由于在文章中有emoji表情,导致有emoji表情的文章都爬取不下来 经过一番搜索之后终于解决了问题。 相关文章可参考: ①. MySQL无法存储Emoji表情问题 ②. mysqlemoji表情报错处理 1. 在navicat中 如果在新建表之前就改变数据库的编码,建表的时候好像可以自己转变过来吧 查看字符集编码: show variables like '%char%'; 更改数据库编码: ALTER DATABASE 数据库名 CHARACTER SET utf8 Caused by: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x94\xA5’ for column Emoji表情存储到Mysql中时报错。 ios的表情(emoji表情),这种表情虽然是utf8编码,但是一个字符需要占用4个字节,而MySQL utf8编码只能存放3字节的字符。在MySQL 5.6中,可以设置编码为utf8mb4,这个字符集是utf8的超集。 1、修改MYSQL字符集 Mysql设置字符编码集为utf8mb4,对应的库、表、字段设置为utf8mb4,注意如果是已经存在的表utf8编码集修改为utf8 今天在设计开源项目的反馈信息表时遇到了emoji表情插入失败的问题,网上找了很多解决方案,答案五花八门,没找到好使的。 经过一番折腾后,终于成功插入了emoji表情,本文就跟大家分享下我的实现过程,欢迎各位感兴趣的开发者阅读本文。 我的服务器是Mac系统,mysql使用brew安装的,windows/linux它的配置文件位置可能有些不一样,具体根据真实情况而定。 先跟大家看下它的报错信息: chat_system> UPDATE chat_system.feedback t SET t.comments = '反馈信息测试:face_with_tears_of_joy:' WHERE t.id = 1 [2020-1 现在有一个需求需要存储微信用户名,微信用户名可能包含Emoji表情,我们一般建表都使用UTF-8编码。Emoji表情是4个字节 而Mysql的utf8编码最多3个字节,所以数据插不进去。 解决方案: 需要将Mysql的编码从utf8转换成utf8mb4。 单元测试一下报错 只修改表的默认字符集不行那怎么办,难道需要mysql后缀配置把字符编码加上。 ?characterEncodi... 言简意赅,直入正题。我用的是mysql数据库,这里我用mysql示意,其他数据库大多一致:mysql存储表情,需要版本支持mysql要高于5.5.3,程序驱动包版本要高于5.1.18。1、数据库方面:配置数据库、表、字段三者的字符集为utf8mb4,因为mysql的utf8不是真正意义上的utf8,它只能存储3个字节,而真正的utf8是可以存储4个字节的数据,后来为了弥补这一缺陷,mysql官方... 字符集:CHARSET=utf8mb4 数据库可以存储emoji表情 排序规则COLLATE=utf8mb4_unicode_ci 数据库可以查询emoji表情,_ci:case insensitive,不区分大小写。 排序规则COLLATE=utf8mb4_bin 也可以查询出emoji表情,utf8mb4_bin是根据二进制(Binary)来查询的。 可具体根据自己的需求去选择。 SELECT ct.name CT ct WHERE ct.NAME LIKE '%???? 在实际开发过程中,涉及到向mysql数据表中insert tweet,很多情况下会报错:1 org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update23 at org.hibernate.exception.SQLStateConverter.handledNonSpecificE... mysql支持utf8mb4字符集,即已支持emoji表情符号的存储。现在想用emoji作为where的一个条件进行select,是否有可能实现?怎么实现呢?回复讨论(解决方案)只要你能在编辑器中打出来,查询和其他字符没什么区别我用chrome +phpmyadmin中用mysql搜:select * from `table` where `nickname` like convert(_utf8...