SQL Server错误“String Data,Right Truncation”是什么意思,我该如何解决?

时间:2008-10-08 15:52:12

标签: sql-server odbc

我们正在网站上进行一些性能测试,我们收到了以下错误:

*** '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代码。

有什么想法吗?

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

4 个答案:

答案 0 :(得分:22)

ZIP_CODE提供的参数(长度)大于ZIP_CODE列宽,或者为CITY提供的参数(长度)大于CITY列宽。

知道为两个?占位符提供的值会很有趣。

答案 1 :(得分:2)

我通过在“?”上使用转换来解决这个问题,所以我的代码看起来像转换(char(50),?)并且摆脱了截断错误。

答案 2 :(得分:1)

我面临着同样的问题。因此,我创建了一个存储过程并定义了大小 @FromDate日期时间, @ToDate日期时间, @BL varchar(50)

在@BL varchar(50)中定义大小后,我没有遇到任何问题。现在一切正常

答案 3 :(得分:0)

这是mssql ODBC驱动程序的已知问题。根据Microsoft博客文章:

  

SQLBindParameter的ColumnSize参数引用SQL类型中的字符数,而BufferLength是应用程序缓冲区中的字节数。但是,如果SQL数据类型为varchar(n)或char(n),则应用程序将参数绑定为SQL_C_CHAR或SQL_C_VARCHAR,并且客户端的字符编码为UTF-8,则可能会得到“字符串数据,右截断即使ColumnSize的值与服务器上数据类型的大小对齐,驱动程序也会发出错误消息。由于字符编码之间的转换可能会更改数据的长度,因此会发生此错误。例如,右撇号(U + 2019)在CP-1252中编码为单字节0x92,而在UTF-8中编码为3字节序列0xe2 0x80 0x99。

您可以找到完整的文章here