您的位置:首页 > 编程语言 > Python开发

[Python]Python/PHP如何查询sql server中NTEXT类型数据

2007-12-17 10:43 886 查看

[Python]Python/PHP如何查询sql server中NTEXT类型数据

Version

Date

Creator

Description

1.0.0.1

2006-11-23

郑昀

草稿

继续阅读之前,我们假设您熟悉以下知识:

n Python / PHP

n SQL Server 2000 SP4以上版本的Microsoft sql server

n pymssql

n NTEXT类型

本文讨论了在Python中,如果利用pymssql来连接Microsft Sql server 2000 SP4以上版本数据库查询NTEXT类型数据,如何成功返回数据。

在PHP中类似问题也可以这么解决。

pymssql - Simple MSSQL Python extension module,当前我们使用的版本是

pymssql-0.7.4.win32-py2.4.exe

您可以遵循后文描述的执行步骤,在此之前,我们先描述一个常见的错误现象。

[常见错误现象1]

关键词Unicode data in a Unicode-only collation or ntext data

cannot be sent to clients using DB-Library

表象如果你的sql server 2000 sp4以上版本的数据库中有一个字段是NTEXT类型,那么当你使用pymssql来做查询的时候,您可能得到如下错误:

错误日志

MS SQL message: ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier. (severity 16)

_mssql.error: SQL Server message 4004, severity 16, state 1, line 1:

Unicode data in a Unicode-only collation or ntext data cannot be sent

to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier.

解释

这是因为我们的pymssql使用早期的ODBC函数集来获取数据。而微软后来引入了ntext和nvarchar类型,而这是Microsoft C-library所不支持的。所以,连pymssql的说明档里也这么建议:

注释

It's the SQL Server complaining that it doesn't support pure Unicode

via TDS or older versions of ODBC. There's no fix for this error.

A workaround is to change the column type to NVARCHAR (it doesn't

exhibit this behaviour), or plain TEXT.

是不是真的要改变你的字段类型了呢?

可行的步骤:

只需要多执行一步即可。

1
声明一句话:
queryTEXTSIZE = str("SET TEXTSIZE 65536")
65536是我限定要返回NTEXT字段数据的最大长度,你可以设置的更大一点,比如1024000。
2

然后执行这句sql语句:

oConn =

_mssql.connect(databaseHost, databaseUserName, databaseUserPwd)

ret = oConn.query(queryTEXTSIZE)

table = oConn.fetch_array()

3

然后,声明你的原来的那个获取NTEXT字段的sql语句如下所示:

修改的sql语句

SELECT cast ( field_name AS TEXT ) AS field_name

这个field_name所代表的字段本来类型是NTEXT,这里我们CAST它为TEXT,这就是一个技巧。

4

接下来执行你的这个sql语句即可:

ret = oConn.query(query)

table = oConn.fetch_array()

[参考资料]

1:《What means "Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library"?


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1409306
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: