本文记录mysql在访问数据库时遇到的一个问题
型 异常报告
消息 PreparedStatementCallback; SQL [update users set name=?,gender=?,age=?,address=?,qq=?,email=? where id=?]; Data truncation: Data too long for column ‘address’ at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column ‘address’ at row 1
描述 服务器遇到一个意外的情况,阻止它完成请求。
例外情况
org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [update users set name=?,gender=?,age=?,address=?,qq=?,email=? where id=?]; Data truncation: Data too long for column ‘address’ at row 1; nested exception is com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column ‘address’ at row 1
org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:104)
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81)
org.springframework.jdbc.core.JdbcTemplate.translateException(JdbcTemplate.java:1443)
org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:633)
org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:862)
org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:917)
org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:927)
cn.itcast.Dao.impl.UserDaoImpl.updateUser(UserDaoImpl.java:58)
cn.itcast.service.impl.UserServiceImpl.udateUser(UserServiceImpl.java:45)
cn.itcast.web.servlet.UpdateUserServlet.doPost(UpdateUserServlet.java:34)
javax.servlet.http.HttpServlet.service(HttpServlet.java:652)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
原因:前端在传输数据时,其中一个位email邮箱数据,再提交后,浏览器的安全机制会将其进行编码,所以导致在编码后的长度可能过长,导致后端在更新数据库时报出数据过长的异常
解决方案:在后端处理中,首先应该在第一行写上req的编码方式,将从前端得到的数据又重新以utf-8的形式编码,这样才能与我们输入到浏览器中的数据编码一致,然后后端执行数据库更新操作就不会出现数据过长异常