• spring-boot jpa mysql emoji utfmb4 异常处理


    spring-boot jpa mysql utf8mb4


    emoji 写入失败 mysql database,table,column 默认为utf8mb4

    Caused by: java.sql.SQLException: Incorrect string value: 'xF0x9Fx98xAD' for column 'title' at row 1
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:965)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973)
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680)
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2484)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
    at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2079)
    at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2013)
    at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5104)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1998)
    at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeUpdate(ProxyPreparedStatement.java:61)
    at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeUpdate(HikariProxyPreparedStatement.java)
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:175)
    ... 68 more

    早期和spring-boot 1.4不会有这个问题

    新服务应用spring-cloud 配spring-boot 就出错,网上各种方案都试了,都不生效。

    基本思路都是在配置文件中设置connectionInitSql

    spring-boot 2.0.0.RC2

    mysql 5.7.14

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    
    
    

    代码环境
    spring-boot 2.0.0.RC2

    多次尝试失败后,隐约有一个思路

    这些办法有些是和spring-boot jpa有区别,虽然都是基于 jdbc hibernate的,但spring-boot jpa,可能会些区别。

    在原文的环境是这些配置可能是生效的,但是在我的spring-boot jpa上不起作用

    网上见的,都是对hibernate有效的方案(假设有效),但不适用spring-boot jpa

    spring-boot的环境比较复杂,具体哪一步出问题

    得到源码里查了,开玩笑的,这工作量就大了

    这种问题有两种思路,看源码是正向的思路

    最实际的办法是反向来看,反向看

    异常里有hikari.pool,这是个以前没见过的sql连接池

    参考  https://github.com/brettwooldridge/HikariCP#configuration-knobs-baby 官方配置

    https://stackoverflow.com/questions/23172643/how-to-set-up-datasource-with-spring-for-hikaricp


    http://www.cnblogs.com/yjmyzz/p/mysql-utf8mb4-jdbc.html

    试了试

    spring.datasource.hikari.connectionInitSql=SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;
    

    问题解决

    应该是这个连接池的哪个环节出问题了,本来应该加载spring-boot 配置参数的datasource实始化的,但这里是不生效。

    单独指定datasource的实始化,才能解决问题

    也许换个连接池也会解决这个问题

  • 相关阅读:
    maven 笔记
    面试题53:在排序数组中查找数字
    面试题52:两个链表的第一个公共节点
    面试题51:数组中的逆序对
    面试题50_2:字符流中第一个只出现一次的字符
    面试题50:第一个只出现一次的字符
    面试题49:丑数
    面试题48:最长不含重复字符的连续子字符串
    面试题47:礼物的最大值
    面试题8:二叉树的下一个节点
  • 原文地址:https://www.cnblogs.com/zihunqingxin/p/8650470.html
Copyright © 2020-2023  润新知