Sorry I'm late on this - I did not see it first time.

On 17/05/11 17:11, eric.b...@barclayscapital.com wrote:
I'm setting up to use DBD::ODBC with the FreeTDS driver to go against
a MS SQL server and am hoping to nail down the specifics of the
relationship between setting $dbh->{LongReadLen} and TEXTSIZE.

what is TEXTSIZE?

So far, LongReadLen has had exactly no impact on retrieval of long
data from my MS sql server.  Regardless of to what LongReadLen is
set, the data that I retrieve is complete beyond the LongReadLeng
setting as long as TEXTSIZE is adequately large.

Normally DBD::ODBC uses a buffer of 80 bytes (or 160 for Unicode) to hold 
column data. If your column is longer than that it will be truncated by the 
ODBC driver and the ODBC driver should return SQL_SUCCESS_WITH_INFO indicating 
the data is truncated. If it does DBD::ODBC sees this and if LongTruncOk is set 
then it is fine, otherwise it errors.

Setting LongReadLen allows you to change the buffer DBD::ODBC uses to avoid 
truncation. It is necessary since some database columns can report a huge size 
it would be ridiculous to allocate unless the application is sure it wants it 
all. However, LongReadLen does not affect all columns e.g., integer columns. It 
does affect SQL_BINARY, nvarchar(MAX) in SQL Server, any column where the 
driver reports its size as 0, SQL_LONGVARBINARY, SQL_WLONGVARCHAR, 
SQL_LONGVARCHAR, MS_SQLS_XML_TYPE.
Setting TEXTSIZE to a value that is less than the length of the data,
however, does result in truncated data returned from the dataserver.

I don't know what TEXTSIZE is.
Additionally, truncated values end with an extended ascii
char...probably a null...I have to admit I haven't looked yet.

So, can we just ignore LongReadLen?  We're migrating from Sybase, and
have been using LongReadLen as a connection parameter in Sybase for
years to set the size of long data returned by the dataserver.

Any light you can shed on this is appreciated.

All the light I have so far. I don't use freeTDS actively myself although I 
have it. If you can provide a simple standalone example which creates a table 
and demonstrates the issue I will look at it.
Eric

Martin
--
Martin J. Evans
Easysoft Limited
http://www.easysoft.com

Reply via email to