“携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天, 点击查看活动详情
org.springframework.dao.DataIntegrityViolationException:
2022/8/19 16:25:16### Error updating database. Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'rule' at row 102
2022/8/19 16:25:16### The error may involve defaultParameterMap
2022/8/19 16:25:16### The error occurred while setting parameters
2022/8/19 16:25:16### SQL: update task SET rule = ?,where id = ?
2022/8/19 16:25:16### Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'rule' at row 102
2022/8/19 16:25:16; Data truncation: Data too long for column 'rule' at row 102; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'rule' at row 102
2022/8/19 16:25:16 at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:104) ~[spring-jdbc-5.1.18.RELEASE.jar!/:5.1.18.RELEASE]
2022/8/19 16:25:16 at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) ~[spring-jdbc-5.1.18.RELEASE.jar!/:5.1.18.RELEASE]
2022/8/19 16:25:16 at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) ~[spring-jdbc-5.1.18.RELEASE.jar!/:5.1.18.RELEASE]
2022/8/19 16:25:16 ... 63 more
Data too long for column 'rule' at row 102; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'rule' at row 102
从抛出的异常中不难看出,报错是因为往rule
字段set的值超过了规定长度。
MySQL中有3种text类型:TEXT、MEDIUMTEXT、LONGTEXT。
text的长度
TEXT:65,535 bytes ~64kb
MEDIUMTEXT: 16,777,215 bytes ~16Mb
LONGTEXT: 4,294,967,295 bytes ~4Gb
spring的DAO层异常如下表:
异常 何时抛出 CleanupFailureDataAccessException 一项操作成功地执行,但在释放数据库资源时发生异常(例如,关闭一个Connection) DataAccessResourceFailureException 数据访问资源彻底失败,例如不能连接数据库 DataIntegrityViolationException Insert或Update数据时违反了完整性,例如违反了惟一性限制 DataRetrievalFailureException 某些数据不能被检测到,例如不能通过关键字找到一条记录 DeadlockLoserDataAccessException 当前的操作因为死锁而失败 IncorrectUpdateSemanticsDataAccessException Update时发生某些没有预料到的情况,例如更改超过预期的记录数。当这个异常被抛出时,执行着的事务不会被回滚 InvalidDataAccessApiusageException 一个数据访问的JAVA API没有正确使用,例如必须在执行前编译好的查询编译失败了 invalidDataAccessResourceUsageException 错误使用数据访问资源,例如用错误的SQL语法访问关系型数据库 OptimisticLockingFailureException 乐观锁的失败。这将由ORM工具或用户的DAO实现抛出 TypemismatchDataAccessException Java类型和数据类型不匹配,例如试图把String类型插入到数据库的数值型字段中 UncategorizedDataAccessException 有错误发生,但无法归类到某一更为具体的异常中