Search code examples
javasqlderbyvarchar

VARCHAR does not work as expected in Apache Derby


I'm having this same problem:

How can I truncate a VARCHAR to the table field length AUTOMATICALLY in Derby using SQL?

To be specific:

CREATE TABLE A ( B VARCHAR(2) ); INSERT INTO A B VALUES ('1234'); would throw a SQLException:

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

that is already answered:

No. You should chop it off after checking the meta-data. Or if you don't wanna check the meta-data everytime, then you must keep both your code and database in sync. But thats not a big deal, its a usual practice in validators.

but my doubt is: isn't VARCHAR suppose to variate its size to fit the data? What's wrong with apache derby's VARCHAR?


Solution

  • The VARCHAR type is variable length, but the number you supply in its definition is the maximum number of characters you're allowing it to have.

    VARCHAR(2) will stores values that are 0-2 characters, as opposed to CHAR(2) which will store 2 characters regardless of what data it actually has.

    Side Note: Once you get to 255 characters, consider using the TEXT type instead.