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

Fre*_*idt 18 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.
Run Code Online (Sandbox Code Playgroud)

第25行如下:

SELECT DISTINCT top 20 ZIP_CODE, CITY, STATE FROM Zipcodes WHERE (ZIP_CODE like ?) OR (CITY like ?) ORDER BY ZIP_CODE
Run Code Online (Sandbox Code Playgroud)

最后,这是perl代码.

有任何想法吗?

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

Chr*_*ver 24

提供的参数ZIP_CODEZIP_CODEs列宽更大(长度),或者提供的参数比s列宽CITY更大(长度)CITY.

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


hui*_*hen 8

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

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

您可以在此处找到完整的文章。

  • 值得注意的是,这仍然是一个问题。有什么解决方法吗? (2认同)