我们正在我们的网站上进行一些性能测试,我们收到了以下错误:
*** '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%"太长了.如果他们给出五位数,我最终只是不添加%.
这是 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。
您可以在此处找到完整的文章。