[Python]Python/PHP如何查询sql server中NTEXT

系统 1590 0

[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


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


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论