Data truncation Data too long for column 'xxx' at row 1

本文详细解析了在使用SpringMVC框架时遇到的MySQL数据截断错误,具体为数据过长导致无法插入数据库的问题。文章提供了错误示例,并探讨了解决方案,包括字段长度调整和数据处理策略。
               

Data truncation: Data too long for column 'xxx' at row 1

完整的错误内容可能是下面这样的:

严重: Servlet.service() for servlet [SpringMVC] in context with path [/zhuozhouzyy] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException

### Error updating database.  Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'content' at row 1

### The error may involve Article.insert-Inline

### The error occurred while setting parameters

### SQL: INSERT INTO `article` (          `id`,          `type`,          `title`,          `content`,          `picture`,          `creat_time`,          `Browase_count`,          `publisher`,          `author`,          `oid`         ) VALUES (          ?,          ?,          ?,          ?,          ?,          ?,          ?,          ?,          ?,          ?         )

### Cause: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'content' at row 1

; SQL []; Data truncation: Data too long for column 'content' at row 1; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'content' at row 1] with root cause

com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'content' at row 1

 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3971)

 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:2501)

 at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)

 at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)

 at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:169)

 at org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:169)

 at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:44)

 at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:69)

 at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:48)

 at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:105)

 at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:71)

 at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:152)

 at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:141)

 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

 at java.lang.reflect.Method.invoke(Method.java:498)

 at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:358)

 at com.sun.proxy.$Proxy16.insert(Unknown Source)

 at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:240)

 at com.wanyu.frame.base.BaseMyIbatisDao.save(BaseMyIbatisDao.java:198)

 at com.wanyu.zhuozhouzyy.dao.ArticleDao.saveOrUpdate(ArticleDao.java:31)

 at com.wanyu.zhuozhouzyy.dao.ArticleDao.saveOrUpdate(ArticleDao.java:20)

 at com.wanyu.frame.base.BaseManager.saveOrUpdate(BaseManager.java:68)

 at com.wanyu.zhuozhouzyy.controller.ArticleController.save(ArticleController.java:141)

 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

 at java.lang.reflect.Method.invoke(Method.java:498)

 at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)

 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)

 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)

 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)

 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:690)

 at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)

 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)

 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)

 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)

 at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)

 at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)

 at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)

 at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)

 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

 at com.wanyu.frame.base.AuthFilter.doFilter(AuthFilter.java:77)

 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

 at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)

 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)

 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)

 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)

 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)

 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)

 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)

 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)

 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)

 at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)

 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)

 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:509)

 at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1104)

 at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)

 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1524)

 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1480)

 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

 at java.lang.Thread.run(Thread.java:745)


其实产生这个错误的原因就是 'xxx' 字段设置的长度太小了,或者说你给这个字段赋值的内容太长了。

如果确实不希望那么长,就做字符串截取;

如果想都放进去,就把字段的长度或类型改一下;

比如 Varchar 的长度是很有限的,那你就可以用 Text、mediumtext,longtext;

或者你也可以用 blob,mediumblob,longblob;


           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.youkuaiyun.com/jiangjunshow

在 MySQL 数据库操作过程中,遇到 `Data truncation: Data too long for column 'type' at row 1` 错误通常表示插入或更新的数据长度超过了目标列的定义长度。这种错误属于数据截断错误,常见于字符类型字段(如 `VARCHAR`、`CHAR`)或二进制类型字段(如 `BLOB`)。 ### 错误原因分析 1. **字段长度限制**:字段定义的长度不足以容纳插入的数据。例如,字段定义为 `VARCHAR(10)`,但插入的字符串长度为 15。 2. **字符编码影响**:某些字符集(如 `utf8mb4`)中,一个字符可能占用多个字节,导致实际存储空间超出字段定义。 3. **SQL 模式设置**:MySQL 的 SQL 模式(`sql_mode`)可能启用了严格模式(如 `STRICT_TRANS_TABLES`),导致插入操作失败而不是自动截断数据。 ### 解决方案 #### 1. 修改字段长度 如果插入的数据长度确实超过了字段定义,最直接的解决方法是修改字段的长度限制。例如,将字段从 `VARCHAR(20)` 扩展为 `VARCHAR(255)`: ```sql ALTER TABLE your_table MODIFY COLUMN type VARCHAR(255); ``` 此操作会调整字段的最大存储容量,以适应更长的数据[^1]。 #### 2. 检查字符集和排序规则 确保字段的字符集和排序规则不会导致存储空间超出限制。例如,`utf8mb4` 字符集下,一个字符最多占用 4 个字节,而 `utf8` 字符集下最多占用 3 个字节。如果字段长度是以字节计算的(如 `CHAR(10)` 表示最多 10 个字符,但具体字节数取决于字符集),则需要根据字符集调整字段长度。 #### 3. 调整 SQL 模式 如果希望 MySQL 在数据过长时自动截断而不是报错,可以调整 SQL 模式,禁用严格模式。例如: ```sql SET sql_mode = 'NO_ENGINE_SUBSTITUTION'; ``` 该操作会将 SQL 模式设置为非严格模式,允许插入操作继续执行,但数据可能会被截断。此方法适用于测试环境,但在生产环境中应谨慎使用,以避免数据丢失或不一致。 #### 4. 数据预处理 在插入或更新数据之前,对数据进行预处理,确保其长度不超过字段定义的限制。例如,在应用程序中对字符串进行截断处理: ```python # Python 示例:对字符串进行截断处理 def truncate_string(value, max_length): if len(value) > max_length: return value[:max_length] return value # 使用示例 type_value = truncate_string("This is a very long string", 20) ``` #### 5. 使用 `INSERT IGNORE` 或 `ON DUPLICATE KEY UPDATE` 如果插入操作可能涉及重复键冲突,可以使用 `INSERT IGNORE` 或 `ON DUPLICATE KEY UPDATE` 来避免错误: ```sql INSERT IGNORE INTO your_table (type) VALUES ('This is a very long string'); ``` 或者: ```sql INSERT INTO your_table (type) VALUES ('This is a very long string') ON DUPLICATE KEY UPDATE type = VALUES(type); ``` ### 总结 处理 MySQL 数据截断错误的关键在于理解字段定义、字符集影响以及 SQL 模式设置。通过调整字段长度、字符集、SQL 模式或进行数据预处理,可以有效解决此类问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值