Python усекается до 255 символов при запросе MS SqlServer с помощью FreeTDS

я думаю, что что-то пропустил в запросе от python с использованием pyodbc поверх FreeTDS на машине Debian. Я не могу иметь больше первых 255 символов.

если я попытаюсь передать данные SQL, как описано здесь: запрос ODBC на MS SQL Server, возвращающий первые 255 символов только в PHP PDO (FreeTDS) с: SELECT CAST(myText as TEXT) FROM mytable я получаю пустую строку/строку нулевой длины,

я также безуспешно тестировал: изменить размер, как описано в приведенной ниже конфигурации, я получаю только первые 255 символов (в то время как на моем Win-боксе pyodbc может получить, например, 279 символов).

вот пример запроса:

SET TEXTSIZE 2147483647;
SELECT [id], myText , LEN(myText)
FROM    mytable

вот мой /etc/freetds/freetds/conf: (что означает ; @ начало строки?)

[global]
    # TDS protocol version
;   tds version = 4.2


#!!!added by me
client charset = UTF-8
text size = 4294967295 
#!!!/added by me

    # Whether to write a TDSDUMP file for diagnostic purposes
    # (setting this to /tmp is insecure on a multi-user system)
;   dump file = /tmp/freetds.log
;   debug flags = 0xffff

    # Command and connection timeouts
;   timeout = 10
;   connect timeout = 10

    # If you get out-of-memory errors, it may mean that your client
    # is trying to allocate a huge buffer for a TEXT field.  
    # Try setting 'text size' to a more reasonable limit 
    #!!!changed by me
    #text size = 64512

другие файлы conf:

> cat /etc/odbc.ini #/etc/odbc.ini is empty! is it ok?
> cat /etc/odbcinst.ini
[FreeTDS]
Description=TDS driver (Sybase/MS SQL)
Driver=/usr/lib/odbc/libtdsodbc.so
Setup=/usr/lib/odbc/libtdsS.so
CPTimeout=
CPReuse=

мой SQL-сервер находится на 192.168.1.2, и я подключаюсь с помощью:

cnstr = 'DRIVER={FreeTDS};SERVER=192.168.1.2;DATABASE=MyDBName;UID=MyUID;PWD=MYPASSWD'
cursor = cnxn.cursor()
cursor.execute(SQL)
# etc.

спасибо за любую помощь,

с уважением


person user1340802    schedule 14.11.2012    source источник


Ответы (1)


в чем смысл ; @ начало строки?

Он начинает комментарий. man freetds.conf — ваш друг. :-)

Я не могу иметь больше первых 255 символов.

Я подозреваю, что вы используете версию протокола 4.2, потому что вы используете соединение без DSN и не упомянули настройку по умолчанию. Также потому, что TDS 4.2 ограничивает столбцы VARCHAR 255 символами.

Вы можете добавить версию протокола в строку подключения, см. http://www.freetds.org/userguide/odbcconnattr.htm.

person James K. Lowden    schedule 19.11.2012