当前位置: 首页 > 知识库问答 >
问题:

为什么这个值对于我的H2表太长

何禄
2023-03-14

我有一个spring data jpa应用程序,它使用H2进行存储。当我尝试将一些数据解析到表中时,我得到一个错误:

 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'."

我所能想到的是分号或其他一些无效字符正在引发此异常。

有人能看到这里的问题,并提出处理它的替代方案吗?

共有1个答案

蒙峰
2023-03-14

您声明的表格定义:

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)
);

不同意错误消息,即备注列是VARCHAR(255)而不是CLOB。

并且您的值确实超过了255个字符的限制。

您可能需要更改表格以匹配您认为的内容。

您的实体似乎没有定义列类型的JPA或Hibernate注释。您可能还需要在备注字段上添加注释,将其标识为CLOB。

 类似资料:
  • 我是Grails新手,不太熟悉GORM如何将列映射到jdbc实现。基本上我有以下错误: 组织。h2.jdbc。JdbcSQLException 消息: “KEYWORDS BINARY(255)”列的值太长:“X'ACED0005737200116A6176612E7574696C2E486173684D61700507DAC131660D1030002460A6C6F6164466163746F

  • 我从课本上抄了一个例子,但它拒绝编译。我是不是在什么地方打错了?出于某种原因,在客户端代码中,collections.sort(words)不允许程序编译。任何帮助都很感激。代码复制自Stuart Reges和Marty Stepp的“构建Java程序”第二版。我正试图通过复制来理解它。 该程序应该将一个CalendarDate对象装入一个ArrayList中。通过实现CalendarDate的可

  • 我是Spock测试框架的新手,我试图为我正在工作的一个android项目做一些测试。我目前测试的这些对象是PJO,所以可以用常规的Spock测试它们。出于某种原因,我一直在我的一个对象上调用isAlive方法,但我知道它被调用了,感觉我已经在调试器中运行了它,它被调用了。所以我希望有人能引导我知道我做错了什么。 下面是我的测试代码: 任何帮助都将不胜感激。我已经在我能想到的每种配置中尝试过了...

  • 我无法理解的是,为什么当我使用Eclipse将所有依赖项提取到jar中的文件夹结构中时,jar不再作为一个正确的Spring Boot应用程序运行。 为了重复我在这里所做的事情,只需使用一个简单的Spring Boot应用程序,并从Eclipse中选择以下内容: 导出-->Runnable JAR-->选择Main Class-->将所需库提取到Jar中。 我只是想了解Spring实际上是如何通过

  • 问题内容: 这是一些用一个非常简单的表设置的SQL。 然后,这会重现问题 有任何想法吗? 我认为nVarchar2有点奇怪吗?如果我将列类型更改为varChar2,则可以。可悲的是,我无法更改问题所在的实际生产数据库的列类型 问题答案: 如果将“ NAME” NVARCHAR2(255)更改为“ NAME” VARCHAR2(255)(即通过使用varchar2),则不会有任何问题。您可以在htt

  • 问题内容: 在Java中,当我说。我得到与答案相同的值,即包含。我已经在C ++中验证了同样的内容。 为什么会这样呢? 问题答案: 阅读Joshua Bloch撰写的Effective Java中的内容。 我找到了这个问题的答案,这里是解释:计算机使用二进制算术工作,java或任何语言的函数的逻辑如下: 注意:如何找到2的补码 对于给定的数字,我们首先找到它的补数,然后再加1。例如,假设我们的数字