Cosa significa l'errore SQL Server & # 8220; String Data, Right Truncation & # 8221; significa e come posso ripararlo?

StackOverflow https://stackoverflow.com/questions/183488

  •  06-07-2019
  •  | 
  •  

Domanda

Stiamo eseguendo alcuni test delle prestazioni sul nostro sito Web e stiamo riscontrando molto il seguente errore:

*** '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.

La riga 25 è la seguente:

SELECT DISTINCT top 20 ZIP_CODE, CITY, STATE FROM Zipcodes WHERE (ZIP_CODE like ?) OR (CITY like ?) ORDER BY ZIP_CODE

E infine, questo è il codice perl.

Qualche idea?

MODIFICA : il problema qui era che stavo cercando nel file zip con la stringa "74523%" che è troppo lungo. Ho finito per non aggiungere la% se danno cinque cifre.

È stato utile?

Soluzione

Il parametro fornito per ZIP_CODE è maggiore (in lunghezza) della larghezza della colonna di ZIP_CODE o il parametro fornito per CITY è più grande ( di lunghezza) rispetto alla larghezza della colonna di CITY .

Sarebbe interessante conoscere i valori forniti per i due segnaposto ? .

Altri suggerimenti

Ho risolto il problema usando una conversione su "? " ;, quindi il mio codice sembra convert (char (50) ,?) e mi sono sbarazzato dell'errore di troncamento.

Questo è un problema noto del driver ODBC mssql. Secondo il post del blog di Microsoft:

  

Il parametro ColumnSize di SQLBindParameter si riferisce al numero di caratteri nel tipo SQL, mentre BufferLength è il numero di byte nel buffer dell'applicazione. Tuttavia, se il tipo di dati SQL è varchar (n) o char (n), l'applicazione associa il parametro come SQL_C_CHAR o SQL_C_VARCHAR e la codifica dei caratteri del client è UTF-8, potresti ottenere " Dati stringa, giusto troncamento " errore dal driver anche se il valore di ColumnSize è allineato con la dimensione del tipo di dati sul server. Questo errore si verifica poiché le conversioni tra le codifiche dei caratteri possono modificare la lunghezza dei dati. Ad esempio, un carattere apostrofo destro (U + 2019) è codificato in CP-1252 come byte singolo 0x92, ma in UTF-8 come sequenza a 3 byte 0xe2 0x80 0x99.

Puoi trovare l'articolo completo qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top