当前位置: 首页 > news >正文

mysql特殊字符、生僻字存储设置

mysql  utf-8模式下,分为ut8mb3,utf8mb4,mb4是支持特殊字符、emoji表情的,mb3是不支持的。

报错信息:

1### Error updating database.  Cause: java.sql.SQLException: Incorrect string value: '\xF0\xA8\x92\x82\xE6\x95...' for column 'fleet_contact_name' at row 1

需要排查mysql的字符、表、字段的字符:

SHOW VARIABLES LIKE 'character_set%';

可以看到database是utf8的,默认是走的utf8mb3。

继续查看表的ddl语句,确保表字段走到utf8mb4。

继续排查程序jdbc的连接设置UTF-8的编码

jdbc:mysql://localhost:3306/66kc_test_yunlian_truck?characterEncoding=UTF-8&useUnicode=true&useSSL=false&allowMultiQueries=true

如果上述都没问题,大概率是mysql-connector的版本问题,升级版本到8.0.13和以后的版本

-- maven引入
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version> <!-- 使用时请检查是否有更新的版本 --></dependency>-- mysql的配置修改项目
driver-class-name: com.mysql.cj.jdbc.Driver

原因解释:

mysql-connector-java 版本在8.0.12之前的,包括8.0.12,服务端必须设置character_set_server=utf8mb4;如果不是的话,就算设置了characterEncoding=UTF-8,照样会被设置为MYSQL的 utf8字符集,也就是utf8mb3。对于8.0.13和以后的版本,如果设置了characterEncoding=UTF-8,他会映射到MYSQL的utf8mb4字符集。如果connectionCollation 也和characterEncoding一起设置了,但是不兼容,characterEncoding会被connectionCollation的设置覆盖掉。由于没有Java-Style的utfmb3对应的字符集名称可以用在connection选项charaterEncoding上,唯一的设置utf8mb3的方式就是在连接选项设置utf8mb3 collation(例如utf8_general_ci),这会强制使用utf8mb3字符集,正如上文所述。

我们这次的问题就是mysql-connector的版本的原因,mysql server 5.7.37 ,client connector是5.1.39。使用mybatis-plus ,Hikari连接池的项目导致插入报错,升级connector8.0.13的版本后问题解决。但是另外一个项目使用mybatis\druid的连接池,就能够正常写入,具体原因可能是编码设置的内部机制问题。

编码解析流程:

总结:1、问题排查时一定确认好生产、测试的配置是否一致,不一致可能导致判断引导错误。

           2、一个项目的报错,最好用同一个项目进行验证,不要用另外一个项目验证(另一个项目验证方便快时想省事)

           3、验证时,一个变量一个变量的验证,否则也会错误引导。事情杂乱时,注意控制步骤跟时间

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • idea-springboot后端所有@注释含义汇总-持续更新!
  • C++ 学习补充 1:短链算法
  • 高效掌握芯片设计技术的不二选择
  • 【redis】一致性hash算法和hash槽
  • 测试面试宝典(三十四)—— token是做什么用的?
  • Linux Vim教程:多文件编辑与窗口管理
  • Unity3D 转换微信小游戏指引 05 广告内购
  • 鸿蒙HarmonyOS开发:多种内置弹窗及自定义弹窗的详细使用指南
  • Vscode——如何快速搜索项目工程中的某个文件的位置
  • 关于STM32 UART4串口通信出现的N个问题的解决
  • 科技与占星的融合:AI 智能占星师
  • mac下通过brew安装mysql的环境调试
  • Vue3计算属性终极实战:可媲美Element Plus Tree组件研发之节点勾选
  • 文件上传漏洞(ctfshow web151-161)
  • 16现代循环神经网络—深度循环与双向循环
  • 【翻译】babel对TC39装饰器草案的实现
  • centos安装java运行环境jdk+tomcat
  • HTML中设置input等文本框为不可操作
  • jquery ajax学习笔记
  • Laravel 实践之路: 数据库迁移与数据填充
  • Laravel核心解读--Facades
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • oldjun 检测网站的经验
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Python socket服务器端、客户端传送信息
  • Python 基础起步 (十) 什么叫函数?
  • 关于List、List?、ListObject的区别
  • ------- 计算机网络基础
  • 将回调地狱按在地上摩擦的Promise
  • 聊聊redis的数据结构的应用
  • 深度学习入门:10门免费线上课程推荐
  • 思考 CSS 架构
  • 栈实现走出迷宫(C++)
  • nb
  • elasticsearch-head插件安装
  • ​业务双活的数据切换思路设计(下)
  • (2)(2.10) LTM telemetry
  • (二)linux使用docker容器运行mysql
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转载)CentOS查看系统信息|CentOS查看命令
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .equals()到底是什么意思?
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .Net Core 中间件验签
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证
  • .NET中使用Redis (二)
  • /boot 内存空间不够
  • @ComponentScan比较