【问题标题】:Truncate a VARCHAR to specific length in Derby AUTOMATICALLY在 Derby 中自动将 VARCHAR 截断为特定长度
【发布时间】:2009-06-19 08:27:32
【问题描述】:

如何在 Derby 中使用 SQL 将 VARCHAR 自动截断为表字段长度?

具体来说:

CREATE TABLE A ( B VARCHAR(2) );
INSERT INTO A B VALUES ('1234');

会抛出 SQLException:

A truncation error was encountered trying to shrink VARCHAR '123' to length 2.

有没有简单的方法来抑制这个异常?

【问题讨论】:

    标签: java string varchar derby javadb


    【解决方案1】:

    没有。你应该在检查元数据后把它砍掉。或者,如果您不想每次都检查元数据,那么您必须保持代码和数据库同步。但这没什么大不了的,这是验证器中的常见做法。

    【讨论】:

    • 这个表到处都在使用。保持代码同步并不容易。
    • 我的意思是与数据库同步。这没什么大不了的,不会时不时的。问自己一个问题,您将多久修改一次数据库中字段的长度。这些验证与数据库约束密切相关,我认为这没有任何问题。
    • 如果你真的想这样做,在插入之前检查元数据,尽管如此,它会导致性能不足。
    【解决方案2】:

    您可以在插入之前修剪 varchar。 在插入脚本/过程中使用修剪功能。

    我不熟悉 Derby,但在 MSSQL 中我做的完全一样,使用 trim 来避免截断错误(仅在我不需要完整数据的情况下),最好增加varchar

    【讨论】:

    • 我相信在这里增加 varchar 是不可取的。他对截断没有任何问题,截断对他来说甚至是一种更可取的行为。其次,修剪仅适用于空格。
    【解决方案3】:

    你可以使用SUBSTR:

    CREATE TABLE A ( B VARCHAR(2) );
    INSERT INTO A B VALUES (SUBSTR('1234', 1, 2));
    

    如果您使用准备好的语句:

    INSERT INTO A B VALUES (SUBSTR(?, 1, 2));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      相关资源
      最近更新 更多