nested exception is dm.jdbc.driver.DMException: 字符串截断

简介: nested exception is dm.jdbc.driver.DMException: 字符串截断 问题处理

背景

今天在日常工作中遇到了一个问题,正常的 insert into操作报错了

### Cause: dm.jdbc.driver.DMException: 字符串截断
; 字符串截断; nested exception is dm.jdbc.driver.DMException: 字符串截断

报错日志的详细信息如图

image.png

问题分析

根据以往经验应该是字段长度不够,才会触发这样的报错,于是排查了数据库中表的字段长度

image.png

再对比控制台打印的insert into 插入语句的参数长度,理论上没有看出哪个字段超出最大长度,于是将控制台中的sql拼写后放入【DM管理工具】进行尝试

INSERT INTO edu_course_api_log ( title, business_type, method, request_method, operator_type, oper_url, oper_ip, oper_param, json_result, status, oper_time, exec_time ) values ( '培训申请第一次或第二次提交审核接口', 8, 'com.dongao.modules.api.controller.TrainApiController.submitExamine()', 'get', 3, '/hbJxjyUser/api/train/submitExamine', '172.16.210.39', '{"sign":["28971d8a3203c3a786b6ce5e8cc5b397"],"applyId":["5"],"type":["1"]}', '{"code":200,"data":{},"success":true,"message":"操作完成."}', 1, now(), 18702 );

可以很直观的看到具体有问题的字段

image.png

查阅待插入字段的内容长度

image.png

汉字长度 17,而数据库"TITLE" VARCHAR(50),从通常的理解应该是可以放下的,那么查阅达梦数据库文档得知

MySQL 中 varchar(1) 可以存一个汉字,DM 数据库是以字节为单位。gb18030 字符集,varchar(2) 才可以存一个汉字;UTF-8 字符集,varchar(3) 才可以存一个汉字。此种情况下,为了保证汉字可以完整的被存储,扩大字段是合理的。

image.png

到这里也就理解了,title字段最大varchar(50) ,而数据库是UTF-8 字符集,17个汉字占用存储空间就是17*3=51>50,因而导致报错

nested exception is dm.jdbc.driver.DMException: 字符串截断

问题解决

找到了原因,那么解决方案就明晰了,可以更改字段长度或者在插入时控制title 汉字内容长度不能超过 16个汉字即可。

相关文章
|
SQL 安全 数据库连接
解决Exception in thread “main“ com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications
解决Exception in thread “main“ com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications
解决Exception in thread “main“ com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications
|
Java 数据库连接 mybatis
mybatis:Exception in thread “main“ org.springframework.jdbc.UncategorizedSQLException
mybatis:Exception in thread “main“ org.springframework.jdbc.UncategorizedSQLException
202 0
mybatis:Exception in thread “main“ org.springframework.jdbc.UncategorizedSQLException
|
Java 数据库连接 数据库
### Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is jav
数据库连接超时,是数据库连接时的相关配置写错,例如:数据库密码,驱动等问题
2136 0
|
Oracle Java 关系型数据库
|
Web App开发 SQL Java
HTTP Status 500 - Could not open JDBC Connection for transaction; nested exception is java.lang.NoCl
HTTP Status 500 - Could not open JDBC Connection for transaction; nested exception is java.
2177 0
|
Web App开发 SQL Java
HTTP Status 500 - Request processing failed; nested exception is org.springframework.jdbc.BadSqlGram
HTTP Status 500 - Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException:type Exception reportmessage Request processing failed; nested exception is org.
1895 0
|
SQL 监控 Java
Could not open JDBC Connection for transaction; nested exception is java.sql.SQLException: Connectio
严重: StandardWrapper.Throwableorg.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is java.
5369 0
|
SQL Java 关系型数据库
JDBC连接各种数据库的字符串
[转自http://www.cnblogs.com/gulvzhe/archive/2012/08/24/2653867.html] JDBC连接各种数据库的字符串大同小异,在此总结一下,备忘。
1190 0
|
2月前
|
Java 关系型数据库 MySQL
mysql5.7 jdbc驱动
遵循上述步骤,即可在Java项目中高效地集成MySQL 5.7 JDBC驱动,实现数据库的访问与管理。
492 1
|
2月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
110 0