Подтвердить что ты не робот

Что означает ошибка SQL Server "String Data, Right Truncation" и как ее исправить?

Мы проводим некоторые тесты производительности на нашем веб-сайте, и мы получаем следующую ошибку:

*** '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-код.

Любые идеи?

EDIT: проблема заключалась в том, что я искал в zip файле строку длиной 74523%, которая слишком длинная. Я просто не добавлял%, если они дают пять цифр.

4b9b3361

Ответ 1

Либо параметр, поставляемый для ZIP_CODE, больше (по длине), чем ширина столбца ZIP_CODE, или параметр, предоставленный для CITY, больше (по длине), чем ширина столбца CITY.

Было бы интересно узнать значения, предоставленные для двух заполнителей ?.

Ответ 2

У меня возникла проблема с помощью конвертации в "?", поэтому мой код выглядит как конвертировать (char (50),?), и это избавило от ошибки усечения.

Ответ 3

Это известная проблема драйвера ODBC для mssql. Согласно сообщению в блоге Microsoft:

Параметр ColumnSize в SQLBindParameter ссылается на количество символов в типе 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.

Вы можете найти полную статью здесь.