【发布时间】:2021-10-20 07:46:27
【问题描述】:
我正在使用 Spring Data JPA,我的列定义是
@Column(length = 100000)
private String description;
在有效负载中,我使用的是字符数为20000 的描述。但它仍然在抛出
错误:类型字符变化的值太长(255)`
如果100000 不足以容纳长度为20000 的字符,varying(255) 的错误如何呢?但是在物理数据库表中我可以在表定义中看到character varying(100000)。
即使 Text Type 仅使用 length 1990 的文本也会出现相同的错误
2021-08-23 17:48:24.727 WARN 21044 --- [nio-8089-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 22001
2021-08-23 17:48:24.727 ERROR 21044 --- [nio-8089-exec-3] o.h.engine.jdbc.spi.SqlExceptionHelper : ERROR: value too long for type character varying(255)
2021-08-23 17:48:24.733 ERROR 21044 --- [nio-8089-exec-3] org.hibernate.AssertionFailure : HHH000099: an assertion failure occurred
【问题讨论】:
-
如果您可以看到要定义为
varchar(10000)的列并且您从 Java 代码中收到错误消息,那么您的 Java 代码正在连接到该列具有不同定义的不同数据库。 -
@a_horse_with_no_name 情况并非如此,因为它在
text上工作,但因为100000对我来说已经足够了,我有兴趣使用这个。 -
varchar(10000)比text没有性能或存储优势。但是,如果 Postgres 抱怨长度,那么我倾向于相信 Postgres 该列被定义为varchar(255)- 错误消息非常明显,您试图在以该最大值定义的列中存储超过 255 个字符。 -
@a_horse_with_no_name 不仅是存储优势,而且我需要更改我的 java 代码以从数据库中取回数据,即我不想要的反序列化,
varchar(255)是我期待太久的默认值对于类型varchar(100000) -
请将错误显示在 postgresql 日志中,包括所有 cmets 等,以及表定义(或 psql \dt 输出)
标签: java sql spring postgresql spring-boot