“携手创作,共同成长!这是我参与「掘金日新计划 · 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 | 有错误发生,但无法归类到某一更为具体的异常中 |