前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql 插入 emoji报错1366

mysql 插入 emoji报错1366

作者头像
kirin
发布2021-04-16 10:24:49
1.6K0
发布2021-04-16 10:24:49
举报
文章被收录于专栏:Kirin博客Kirin博客

最近做项目需要用到emoji表情,好不容易把前端搞定,提交数据到后台发现无法插入数据库,异常提示如下:

org.springframework.jdbc.UncategorizedSQLException: ### Error updating database. Cause: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x8D\x85\xF0\x9F…’ for column ‘document’ at row 1 ### The error may exist in com/xxx/xxxx/dao/CreativeMapper.java (best guess) ### The error may involve com.xxx.xxx.dao.CreativeMapper.insert-Inline ### The error occurred while setting parameters ### SQL: INSERT INTO tab_xxx ( id, document, description, user_id, like_num, comment_num, doc_status, read_num, create_time ) VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ? ) ### Cause: java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x8D\x85\xF0\x9F…’ for column ‘document’ at row 1 ; uncategorized SQLException; SQL state [HY000]; error code [1366]; Incorrect string value: ‘\xF0\x9F\x8D\x85\xF0\x9F…’ for column ‘document’ at row 1; nested exception is java.sql.SQLException: Incorrect string value: ‘\xF0\x9F\x8D\x85\xF0\x9F…’ for column ‘document’ at row 1

1 2 3 4 5 6 7 8 9 开发环境spring boot + druid + mybatisplus + mysql,这里贴一下数据库相关配置代码

/** 驱动包 */ <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.12</version> </dependency>

datasource: username: xxx password: xxxx url: jdbc:mysql://localhost:3306/xxx?characterEncoding=utf-8&autoReconnect=true&rewriteBatchedStatements=TRUE&useSSL=false&serverTimezone=CTT driver‐class‐name: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource druid: connection-init-sqls: SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 上网查询了一下资料,锁定mysql编码格式问题,解决问题后总结如下: 1、mysql版本5.5.3+,必须升级到较新版本 2、mysql connection版本高于5.1.13 3、修改mysql字符集

按照网上收集资料进行了mysql字符集修改,字符集已经修改如下图,仍然无法插入emoji表情,仔细排查了一下是因为字段未修改成utf8mb4,通过下面第一种方法中的字段修改代码修改后即可成功插入。

查看mysql字符集

SHOW VARIABLES WHERE Variable_name LIKE ‘character_set_%’ OR Variable_name LIKE ‘collation%’; 1

第一种:代码方式修改:这里特别注意修改字段类型,否则仍然不会成功

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

/** 网上有些写法不一样,我这里按照下面方式修改保存成功 */ ALTER TABLE table_name MODIFY 字段名 VARCHAR(128) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; 1 2 3 4 5 第二种:mysql工具中手动修改数据库和表 第三种:修改mysql配置文件my.cnf(window为my.ini),修改完成后重启mysql服务

[client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [mysqld] character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect=’SET NAMES utf8mb4′ 1 2 3 4 5 6 7 8 9 记录一个小坑,有遇到的朋友可以试试 在使用docker服务器部署mysql时候,mysql字符集通过my.cnf已经设置成了 utf8mb4,使用的Navicat工具连接数据库,无法直接在数据库表格中添加emoji,仍然会报’\xF0\x9F\x8D\x85\xF0\x9F…’错误,通过代码写入,可以写入成功,但是在数据库中查看都是???,这个太坑了,折腾了几个小时仍然没有好,后来用SQLyog客户端工具连接数据库,打开一看都是正常显示,也可以直接在数据库表格中复制粘贴添加emoji表情,不知道是不是Navicat工具的bug。 ———————————————— 版权声明:本文为CSDN博主「F~cjy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/yy290879584/article/details/103342043

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-04-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档