pymssql ntext字段调用问题解决方法

Advertisement

下面是调用方式:

Example script - pymssql module (DB API 2.0)

Example script - _mssql module (lower level DB access)

不过,在我使用过程中,发现,如果表中包含了ntext字段,就会出错,提示

不能用 DB-Library(如 ISQL)或 ODBC 3.7 或更早版本将 ntext 数据或仅使用

Unicode排序规则的 Unicode 数据发送到客户端。

查了一下,发现官方网站有解释:

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

A: If you connect to a SQL Server 2000 SP4 or SQL Server 2005, and if you make a SELECT query on a table that contains a column of type NTEXT, you may encounter the following error:
_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.

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. Microsoft has deprecated DB-Library a long ago, in favor of ODBC, OLE DB, or SQL Native Client. Many new features of SQL 2005 aren't accessible via DB-Library so if you need them, you have to switch away from pymssql or other tools based on TDS and DB-Library.

A workaround is to change the column type to NVARCHAR (it doesn't exhibit this behaviour), or TEXT.

大概意思是,这是因为我们的pymssql使用早期的ODBC函数集来获取数据。后来微软才引入了ntext和nvarchar类型,但Microsoft并没有更新他们的 C-library,所以就没办法支持了。建议:将ntext修改为nvarchar或text.

显然,这不是个好的解决方法,那么是否就没有其他办法了呢?

还好,不用绝望,既然不支持ntext但支持text,那么我们只需要在输出时将ntext转换为text就好了,方法很简单:

SELECT cast ( field_name AS TEXT ) AS field_name

唯一的问题,可能是ntext和text字段所支持的长度不一样,所以也许你还需要设置一下TEXTSIZE

SET TEXTSIZE 65536

当然,你还可以将字段设置的大一点,这个就看你的需要了。

Similar Posts:

  • C#中WebBrowser.DocumentCompleted事件多次调用问题解决方法

    关于DocumentCompleted事件,MSDN给出的解释是在文档加载完毕后执行,但是在我的程序中DocumentCompleted却被多次调用,查了一下资料,大概出现了以下几种情况. 1.WebBrowser载入一个页面后DocumentCompleted事件会执行两次,但这两次的ReadyState状态不一样,分别是Intercative和Complete.而MSDN对这两种状态值的解释是:Complete该控件已完成新文档及其所有内容的加载:Interactive该控件已经加载足够的文

  • 解决pymssql中调用ntext字段问题

    pymssql是python用来连接mssql数据库的一个类库.该库遵守Python DB API 2.0 标准,并且还附带了一个原生的低阶数据访问模块. 下面是调用方式: Example script - pymssql module (DB API 2.0) Example script - _mssql module (lower level DB access) 不过,在我使用过程中,发现,如果表中包含了ntext字段,就会出错,提示 不能用 DB-Library(如 ISQL)或 OD

  • ALV调用Excel inplace不能传递数据问题解决方法

    ALV调用Excel inplace不能传递数据问题解决方法 在使用ALV显示数据, 希望调用Excel inplace功能直接在excel中查看数据(sy-ucomm = &VEXCEL), 可是当我们点该按钮是, excel是成功出现了,可是alv grid的数据却没有写到excel中. 解决方法: 设定Excel的安全: EXCEL2007:开发工具-------> 宏安全性--------->信任对VBA工程对象模型的访问

  • 不能调用SCIM的问题解决方法

    openoffice不能调用SCIM的问题解决方法 $ oowriter Gtk-Message: Failed to load module "gnomebreakpad": /usr/lib/openoffice/program/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /usr/lib/bug-buddy/libbreakpad.so.0) (soffice:27198): Gtk-WARNING

  • 通过反射修改类的私有字段值,调用私有方法

    转自: http://www.blogjava.net/jjwwhmm/archive/2008/06/19/209083.html 下面这个例子在实际项目中一般都不会这么用,只是用来说明怎么通过反射修改类的私有字段的值. 有一个类TestData: public class TestData { private String name = "1"; public String getName() { return name; } } 在运行的时候怎么来修改name的值呢? publi

  • 根据字段调用所有set方法

    public void reflect7(){ try { Class cls = Class.forName("entity.UserBean");//加载UserBean类到内存中!获取一个Class对象 Object obj = cls.newInstance();//通过class类反射一个对象实体 Field[] fields = cls.getDeclaredFields(); UserBean bean = (UserBean)obj; for (Field field

  • MSSQL text/ntext 字段在读取时返回值不是String而是Object:net.sourceforge.jtds.jdbc.ClobImpl@66fa192的解决方法

    困扰了我半天的问题终于解决了,心里还是挺高兴的. MSSQL text/ntext 字段在读取时返回值不是String而是Object: net.sourceforge.jtds.jdbc.ClobImpl@66fa192 后来终于在网上找到了解决办法,只要在连接数据库的URL后边加上";useLOBs=false"这句就O了. 参考链接:https://connect.gxsoftware.com/Forums/Forum-WCB-Java-Development.htm?dbid=

  • 模拟字符串处理函数 stuff 处理 Ntext 字段

    if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_stuff]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[p_stuff] GO /*--Ntext字段处理 模拟字符串处理函数 stuff 完成表中 ntext 字段的 stuff 处理 注意,表中需要有列名为:id 的主键(或标识字段),数据类型为int 如果

  • iphone 开发中使用zbar时遇到的几个典型问题解决方法。

    iphone 开发中使用zbar时遇到的几个典型问题解决方法. 在近期的一个ios项目中使用到了一个二维码扫描库(Qrcode)--ZBar, 期间遇到2个问题. 1. zbar下载后使用其libzbar.a 发现无法再arm7上运行. 2. zbar使用过程中,如果多次打开摄像头扫描Qrcode,会出现memory leak problem, 导致其内存指数型增长,大概8次调用后即耗费了85M 左右的内存, 最后导致app崩溃. 3. libzbar.a 在重新编译后, 无法再在simulat

  • 我的Ajax服务端框架 - (1) JS直接调用C#方法

    注意:本文所介绍的框架已有新版本,点击后面链接即可阅读. [写自己的ASP.NET MVC框架] 返回到目录:晒晒我的Ajax服务端框架 在Ajax网站中,Javascript经常需要请求服务器,比如:提交一个小的状态修改请求,获取某个对象的JOSN字符串,获取一小段HTML,等等. FishWebLib的Ajax服务端框架提供的这个功能将让您可以在Javascript直接调用一个C#方法,用来完成上述需求.示例代码如下: C#方法 namespace MyLab.AjaxService { /