Subject Re: [firebird-support] New record size of 107496 bytes is too long.
Author Timothy Madden
On Sat, Aug 23, 2008 at 6:25 PM, Helen Borrie <helebor@...> wrote:
At 18:30 23/08/2008, you wrote:
>Hello
>
>I get this message from embedded Firebird 2.1.1 when creating one of my
>tables.
>Can I do something about it ? Can I enlarge this limit ?

No. The limit is 64 KB.

>It is so ugly !
>
>Why does Firebird have this restriction ?

Because even a record size of 64 KB is on the outer limits of reasonableness
for a relational database.

>Besides, I use VARCHAR in my field
>definitions so an actual record only rarely will reach the maximum length,
>if at all.

So make varchars of the appropriate size. Actually a 32 KB varchar isn't
reasonable either. A design rule of thumb would be to limit the size of
varchars to 2 bytes less than the maximum width allowed for indexing your
column.

>If I declare a VARCHAR column as BLOB CHARACTER SET UNICODE_FSS, can I
insert a string in it just as if the column was VARCHAR with INSERT INTO
Table

If you declare it as a BLOB it's not a varchar. ;-) Declare the BLOB as
SUB_TYPE 1 (or SUB_TYPE TEXT, if you prefer) and you can operate on the data
in many of the same ways you do with varchars.

With a text BLOB you can pass a string as input to a BLOB column in insert
and update statements. A string cannot be passed as the argument for a
stored procedure input parameter that is declared as a BLOB, text or not.

With regard to UNICODE_FSS varchars, keep in mind that the maximum length of
varchar is 32765 bytes, not characters. UNICODE_FSS uses 3 bytes per
character so your maximum varchar length is 10,921 bytes. I mentioned that
since it reduces the maximum size of a substring from your BLOB. UNICODE_FSS
is effectively deprecated in Fb 2.1, actually.

>... ? What are the differences between working with BLOB and VARCHAR
columns
>?

The main difference is that you can't index a BLOB column; and BLOBs don't
occupy space in the main record, other than a 4-byte BLOB_ID. BLOBS don't
have a size limit, either.

./heLen

'Reasonable' for me means to declare a 'VARCHAR' column and then push any
string in it without any other worries. Like you can do with a TEXT BLOB.

Can I match a pattern with LIKE on a text BLOB ?

I know about 10K length limit for UNICODE_FSS. Why is it not called UTF-8,
which is the standard adopted name ?

I had no idea UNICODE_FSS is deprecated. How should I store international
text in my db than ?

Thank you,
Timothy Madden


[Non-text portions of this message have been removed]