zoukankan      html  css  js  c++  java
  • [Python]Python/PHP如何查询sql server中NTEXT类型数据

    [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函数集来获取数据。而微软后来引入了ntextnvarchar类型,而这是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"?
     
  • 相关阅读:
    原创 爱因斯坦迷题及推导过程
    惊闻姑姑家女婿去世,哀叹生命之脆弱,死亡如此接近
    京东自营预售逻辑
    自营SKU绑定逻辑
    自营结算解释&对账逻辑
    CPS逻辑
    京东搜索结果数据异常
    C++静态库中使用_declspec(dllexport) 不能导出函数的问题
    HTTP+SVN访问速度慢的问题
    Python log
  • 原文地址:https://www.cnblogs.com/zhengyun_ustc/p/578161.html
Copyright © 2011-2022 走看看