zl程序教程

您现在的位置是:首页 >  后端

当前栏目

pymssqlntext字段调用问题解决方法

方法 问题 解决 调用 字段
2023-06-13 09:14:07 时间

下面是调用方式:

Examplescript-pymssqlmodule(DBAPI2.0)

Examplescript-_mssqlmodule(lowerlevelDBaccess)

不过,在我使用过程中,发现,如果表中包含了ntext字段,就会出错,提示

不能用DB-Library(如ISQL)或ODBC3.7或更早版本将ntext数据或仅使用

Unicode排序规则的Unicode数据发送到客户端。

查了一下,发现官方网站有解释:

Q:Whatmeans"UnicodedatainaUnicode-onlycollationorntextdatacannotbesenttoclientsusingDB-Library"?

A:IfyouconnecttoaSQLServer2000SP4orSQLServer2005,andifyoumakeaSELECTqueryonatablethatcontainsacolumnoftypeNTEXT,youmayencounterthefollowingerror:
_mssql.error:SQLServermessage4004,severity16,state1,line1:
UnicodedatainaUnicode-onlycollationorntextdatacannotbesenttoclientsusingDB-Library(suchasISQL)orODBCversion3.7orearlier.

It"stheSQLServercomplainingthatitdoesn"tsupportpureUnicodeviaTDSorolderversionsofODBC.There"snofixforthiserror.MicrosofthasdeprecatedDB-Libraryalongago,infavorofODBC,OLEDB,orSQLNativeClient.ManynewfeaturesofSQL2005aren"taccessibleviaDB-Librarysoifyouneedthem,youhavetoswitchawayfrompymssqlorothertoolsbasedonTDSandDB-Library.

AworkaroundistochangethecolumntypetoNVARCHAR(itdoesn"texhibitthisbehaviour),orTEXT.

大概意思是,这是因为我们的pymssql使用早期的ODBC函数集来获取数据。后来微软才引入了ntext和nvarchar类型,但Microsoft并没有更新他们的C-library,所以就没办法支持了。建议:将ntext修改为nvarchar或text.

显然,这不是个好的解决方法,那么是否就没有其他办法了呢?

还好,不用绝望,既然不支持ntext但支持text,那么我们只需要在输出时将ntext转换为text就好了,方法很简单:

SELECTcast(field_nameASTEXT)ASfield_name

唯一的问题,可能是ntext和text字段所支持的长度不一样,所以也许你还需要设置一下TEXTSIZE

SETTEXTSIZE65536

当然,你还可以将字段设置的大一点,这个就看你的需要了。