[Python]Python/PHP 如何查询 sql server中 NTEXT 类型数据
|
Version
|
Date
|
Creator
|
Description
|
|
|
|
郑昀
|
草稿
|
继续阅读之前,我们假设您熟悉以下知识:
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

