2

Debian マシンで FreeTDS を介して pyodbc を使用して、Python からのクエリで何かを見逃していると思います。最初の 255 文字を超えることはできません。

ここで説明するように SQL データをキャストしようとすると: MS SQL Server の ODBC クエリは、PHP PDO (FreeTDS)でのみ最初の 255 文字を返します: 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.

助けてくれてありがとう、

よろしくお願いします

4

1 に答える 1

2

の意味は何ですか; @ 行頭?

コメントを開始します。 man freetds.confはあなたの友達です。:-)

最初の 255 文字を超えることはできません。

DSN なしの接続を使用しており、デフォルトの設定について言及していないため、プロトコル バージョン 4.2 を使用していると思われます。また、TDS 4.2 では VARCHAR 列が 255 文字に制限されているためです。

接続文字列にプロトコル バージョンを追加できます。http://www.freetds.org/userguide/odbcconnattr.htm

于 2012-11-19T14:06:46.957 に答える