in reply to dbi and sqlserver truncating text

Are you using freeTDS? The reason I ask is freetds silently truncating text/varchar/etc fields to 80 characters.

Replies are listed 'Best First'.
Re^2: dbi and sqlserver truncating text
by fionbarr (Friar) on Mar 23, 2012 at 16:10 UTC
    yes....thanks for the response...I'm using placeholders...I'm going to use a SQL string.
      If you read all of that thread there was a fix for it.

        If you read all of that thread there was a fix for it.

        http://lists.ibiblio.org/pipermail/freetds/2011q2/026944.html

        > As others have mentioned, the bug appears to be caused in > src/tds/query.c and can be largely fixed with this patch: > > --- freetds-0.91RC2-orig/src/tds/query.c 2011-03-30 > +++ freetds-0.91RC2-patch_truncation/src/tds/query.c 2011-05-05 > @@ -799,7 +799,7 @@ > if (tds_get_column_declaration(tds, > params->columns[i], \ declaration + strlen(declaration)) == TDS_FAIL +) > goto Cleanup; > } else { > - strcat(declaration, "varchar(80)"); > + strcat(declaration, "varchar(4000)"); > } > > /* convert it to ucs2 and append */ > > However, I'm not sure that every server accepts varchar(4000) as a > column type, and some may allow even larger varchars (so that the > fixed code is still buggy if the string is longer than 4000 chars). > I'd be interested in your thoughts on the right way to fix it. Thanks for the patch. It will help many DBD::Sybase users. I applied it, along with some minor typographical changes, to CVS HEAD and to th +e 0.91 release branch. This is a perfect example of fixing what matters. I personally don't use parameterized queries and await a real fix ;-) which will involve passing a parameter descriptor to ct-lib. Meanwhile, your one-liner solves an immediate problem for any reasonably modern Microsoft server.
        http://freetds.cvs.sourceforge.net/viewvc/freetds/freetds/src/tds/query.c?view=markup