SQLServer错误“字符串数据,正确的截断”是什么意思,我该如何修复它?

问题描述 投票:0回答:7
我们在我们的网站上进行了一些绩效测试,我们会收到以下错误:

*** 'C:\inetpub\foo.plex' log message at: 2008/10/07 13:19:58 DBD::ODBC::st execute failed: [Microsoft][SQL Native Client]String data, right truncation (SQL-22001) at C:\inetpub\foo.plex line 25.

线25如下:

SELECT DISTINCT top 20 ZIP_CODE, CITY, STATE FROM Zipcodes WHERE (ZIP_CODE like ?) OR (CITY like ?) ORDER BY ZIP_CODE

最后,这是Perl Code。 任何想法?

eDit

:这里的问题是我在zip文件中搜索了字符串“ 74523%”,这太长了。 我最终只会添加五位数,只是不添加%。

wher提供的参数比ZIP_CODE

S列宽度大(长度)或为
sql-server odbc
7个回答
31
投票
提供的参数大于(长度)大于

CITY

S列宽度。 
知道为两个占位持有人提供的价值很有趣。
    
这是MSSQL ODBC驱动程序的已知问题。根据Microsoft博客文章:

SQLBINDPARAMETER的列size参数是指SQL类型中的字符数,而BufferLength是应用程序缓冲区中的字节数。但是,如果SQL数据类型为VARCHAR(N)或CHAR(N),则该应用程序将参数绑定为SQL_C_CHAR或SQL_C_VARCHAR,并且客户端的字符编码为UTF-8,您可能会获得“字符串数据,正确的truncation “驱动程序的错误,即使列尺寸的值与服务器上的数据类型的大小对齐。由于字符编码之间的转换可能会改变数据的长度,因此发生此错误。例如,右撇号字符(U+2019)在CP-1252中编码为单个字节0x92,但在UTF-8中作为3字节序列0xe2 0x800x99。


您可以找到完整的文章。
    


17
投票

如果连接是通过php完成的,我们使用连接参数“ tarneet”求解:

CITY

我正面临同样的问题。因此,我创建了一个存储过程,并定义了大小 @fromdate DateTime, @Todate DateTime, @bl varchar(50) 定义@bl varchar(50)中的大小后,我没有遇到任何问题。现在正常工作


2
投票

我今天在一个多年来运行的应用程序上经历了这一点。我的原因有些不同,所以我想我会分享以后的任何人。

对于我遇到的问题,我们有一个应用程序,该应用程序可以在客户端计算机上运行,客户通过ODBC连接与DB服务器通话。无论出于何种原因,客户端上的ODBC驱动程序已更新为新版本的服务器(过去通常不重要)。该版本相距仅1个月,但是该问题的原因。我去了Windows补丁历史记录,并卸载了与ODBC驱动程序日期最匹配的日期,这解决了问题。 (要检查ODBC驱动程序版本,只需在Windows启动中搜索ODBC,打开ODBC 32,单击“驱动程序”选项卡,滚动到驱动程序的您使用的连接类型,并且日期列出了最右边。)

2
投票

与luca.vercelli

提供的
solution相似:在r中,使用
?

1
投票
sqlsrv_connect(DB_PTH_HOST, array( "Database" => ***, "UID" => ***, "PWD" => ***, "CharacterSet" => "UTF-8"));

。我的数据库使用

dbConnect

整理,并在

odbc

0
投票
encoding

编码解决了问题。

lways doublecheck string长度 - 当将值插入8个字符的列中Sp_help列出为长度= 12的列中时,我会承认遭受此错误


0
投票
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.