web-dev-qa-db-ja.com

SQL Serverエラー「文字列データ、正しい切り捨て」とはどういう意味ですか、どうすれば修正できますか?

私たちは私たちのウェブサイトでいくつかのパフォーマンステストを行っており、次のエラーをたくさん受け取ります:

*** '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 [〜#〜]:ここでの問題は、長すぎる文字列「74523%」でZipファイルを検索していたことです。彼らは5桁を与える場合、私は単に%を追加しないことになりました。

18
Frew Schmidt

Zip_CODEに指定されたパラメーターがZip_CODEs列幅より大きい(長さ)か、CITYに指定されたパラメーターがCITYs列幅より大きい(長さ)のいずれかです。

2つの?プレースホルダーに指定された値を知ることは興味深いでしょう。

23
Chris Driver

「?」で変換を使用して問題を回避したので、コードはconvert(char(50),?)のようになり、切り捨てエラーがなくなりました。

2
Keegan

これは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では1バイト0x92としてエンコードされますが、UTF-8では3バイトシーケンス0xe2 0x80 0x99としてエンコードされます。

あなたは完全な記事を見つけることができます ここ

0
hui chen