*** '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
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。
您可以找到完整的文章。
我今天在一个多年来运行的应用程序上经历了这一点。我的原因有些不同,所以我想我会分享以后的任何人。
对于我遇到的问题,我们有一个应用程序,该应用程序可以在客户端计算机上运行,客户通过ODBC连接与DB服务器通话。无论出于何种原因,客户端上的ODBC驱动程序已更新为新版本的服务器(过去通常不重要)。该版本相距仅1个月,但是该问题的原因。我去了Windows补丁历史记录,并卸载了与ODBC驱动程序日期最匹配的日期,这解决了问题。 (要检查ODBC驱动程序版本,只需在Windows启动中搜索ODBC,打开ODBC 32,单击“驱动程序”选项卡,滚动到驱动程序的您使用的连接类型,并且日期列出了最右边。)与luca.vercelli
提供的solution相似:在r中,使用
?
sqlsrv_connect(DB_PTH_HOST, array(
"Database" => ***,
"UID" => ***,
"PWD" => ***,
"CharacterSet" => "UTF-8"));
。我的数据库使用
dbConnect
整理,并在
odbc
encoding
编码解决了问题。
lways doublecheck string长度 - 当将值插入8个字符的列中Sp_help列出为长度= 12的列中时,我会承认遭受此错误