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

news/2024/7/2 5:30:53

[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"?
     
 



http://www.niftyadmin.cn/n/3648257.html

相关文章

django启用超级管理员_如何启用和连接Django管理界面

django启用超级管理员介绍 (Introduction) If you have followed along in the Django Development series, you’ve started a Django application, connected your application to MySQL, and created the database models for the Posts and Comments data within your blog…

阿里巴巴十年Java架构师分享

1.源码分析专题详细介绍源码中所用到的经典设计思想,看看大牛是如何写代码的,提升技术审美、提高核心竞争力。 帮助大家寻找分析源码的切入点,在思想上来一次巨大的升华。知其然,并知其所以然。把知识变成自己的 2.分布式架构互联…

获取两个时间之间的所有年月份

/** * 获取两个时间之间的所有年月份 * param begDate 格式&#xff1a;yyyy-MM * param endDate 格式&#xff1a;yyyy-MM * return * throws ParseException */ public static List<String> getMonthBetweenTime(String begDate,S…

《职场》笔记20061123

“人生一世&#xff0c;作选择确实是最难的事情&#xff0c;在无法选择时&#xff0c;你不必考虑太多&#xff1b;而选择多了&#xff0c;是好事&#xff0c;但也会带来很多忧虑和挫折&#xff0c;你看&#xff0c;一个两岁的孩子&#xff0c;选择起来很简单&#xff0c;因为他…

阿里架构师和你聊聊【系统架构】

黄勇&#xff0c;从事近十年的 JavaEE 应用开发工作&#xff0c;现任阿里巴巴公司系统架构师。对分布式服务架构与大数据技术有深入研究&#xff0c;具有丰富的 B/S 架构开发经验与项目实战经验&#xff0c;擅长敏捷开发模式。国内开源软件推动者之一&#xff0c;Smart Framewo…

《裸阳》对互联网公司对技术人的启示

“族群&#xff0c;长官。人与人之间的合作。索拉利世界已经把它完全抛弃了。那是一个由孤零零的个人所形成的世界&#xff0c;他们唯一的社会学家对这种情况还感到高兴。少了人与人的相互关系&#xff0c;生命中的主要乐趣就不存在了&#xff0c;智慧的价值也没有了&#xff0…

如何在Ubuntu 20.04上安装和保护phpMyAdmin

An earlier version of this tutorial was written by Brennan Bearnes. 该教程的早期版本由Brennan Bearnes编写 。 介绍 (Introduction) While many users need the functionality of a database management system like MySQL, they may not feel comfortable interacting …

{QA}去新浪好还是去X虎好以及事业起步时什么较重要?

一&#xff1a;这篇日志是针对新近毕业的学生说的&#xff0c;对已经工作许久的人们&#xff0c;也许也有一点点启发意义。二&#xff1a;和新近毕业研究生的对话你说去新浪好还是去X虎好&#xff1f;恩&#xff0c;现在对前途看得不是很清楚啊&#xff0c;比较迷茫。觉得不进百…