【发布时间】:2014-08-04 13:05:47
【问题描述】:
我有一个使用 H2 进行存储的 spring-data-jpa 应用程序。当我尝试将一些数据解析到表中时,出现错误:
o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 22001, SQLState: 22001
2014-06-13 15:42:07.062 ERROR 66742 --- [nio-9001-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper : Value too long for column "REMARKS VARCHAR(255)": "'""DOB 31 Jan 1939; Cedula No. 6068015 (Colombia); alt. Cedula No. 6067015 (Colombia); Passport T321642 (Colombia); alt. Passport... (259)"; SQL statement:
insert into sdn (call_sign, grt, program, remarks, sdn_num, sdn_type, title, tonnage, vess_flag, vess_owner, vess_type, ent_num) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [22001-172]
我有一个表定义为:
CREATE TABLE IF NOT EXISTS Sdn (
entNum BIGINT (11) NOT NULL,
sdnName VARCHAR(700) NULL,
sdnType VARCHAR(24) NULL,
program VARCHAR(100) NULL,
title VARCHAR(4000) NULL,
callSign VARCHAR(20) NULL,
vessType VARCHAR(50) NULL,
tonnage VARCHAR(30) NULL,
grt VARCHAR(20) NULL,
vessFlag VARCHAR(80) NULL,
vessOwner VARCHAR(300) NULL,
remarks CLOB NULL,
UNIQUE KEY entityNum(entNum)
);
我的@Entity 类为:
@Entity
public class Sdn {
@Id
private long entNum;
private String sdnName;
private String sdnType;
private String program;
private String title;
private String callSign;
private String vessType;
private String tonnage;
private String grt;
private String vessFlag;
private String vessOwner;
private String remarks;
这是违规记录,显然小到可以放入列中:
"DOB 31 Jan 1939; Cedula No. 9876543 (cccccccc); alt. Cedula No. 6067015 (cccccccc); Passport T123456 (cccccccc); alt. Passport 1234567 (Comoros); alt. Passport 12345 (Argentina); alt. Passport 87654321 (ppppppppp); a.k.a. 'THE TTTT PLAYER'; a.k.a. 'NAME1'."
我能想到的只是分号或其他一些无效字符引发了这个异常。
任何人都可以在这里看到问题,并提出解决问题的替代方法吗?
【问题讨论】:
-
strlen() 您的字符串(包括开头/结尾处的
")显示它的长度为 258 个字符。所以,是的,DB 是对的,而您正在将大象推入老鼠洞。
标签: hibernate h2 spring-data-jpa