2011-02-09 15 views
8

私は、次のUPDATEクエリを実行すると、私は奇妙な '切り捨て、誤ったINTEGER値' というエラーを取得しています:MySQLの '切り捨てられた間違ったINTEGER値'

update tbl 
set projectNumber = right(comments, 7) 
where createdBy = 'me' 
and length(CONVERT(right(comments, 7), SIGNED INTEGER)) = 7 
and CONVERT(right(comments, 7), SIGNED INTEGER) > 0 
and CONVERT(right(comments, 7), SIGNED INTEGER) is not null 
and createdOn > '2011-01-31 12:00:00' 
and projectNumber is null 

projectNumberはVARCHAR(10)です。

ストレートセレクトとして実行するとエラーが発生せず、結果が期待どおりに表示されます。何か案は?基本的に私はprojectNumberフィールドを更新しようとしていますが、インポートされたノート内のコメントの終わりが7文字の数字です(projectNumberはではありません)。 7数値なので、フィールドはvarchar(10)です。

答えて

8

これはエラーではありません。これは、非数値から整数への変換を求めるときにCONVERT()から来る警告です。私はそれが警告、エラーではないですが、言ったように

mysql> SELECT CONVERT(right('1s23d45678', 7), SIGNED INTEGER); 
+-------------------------------------------------+ 
| CONVERT(right('1s23d45678', 7), SIGNED INTEGER) | 
+-------------------------------------------------+ 
|            3 | 
+-------------------------------------------------+ 
1 row in set, 1 warning (0.00 sec) 

mysql> SHOW WARNINGS; 
+---------+------+----------------------------------------------+ 
| Level | Code | Message          | 
+---------+------+----------------------------------------------+ 
| Warning | 1292 | Truncated incorrect INTEGER value: '3d45678' | 
+---------+------+----------------------------------------------+ 
1 row in set (0.00 sec) 

を:

は見るために、コンソールでこれらのクエリを実行します。あなたのクエリは更新を正しく行うべきです。

+2

興味深いです。エラーコード1292(あなたの例のようなものです)とは言いますが、アップデートが実行されていないことを確認できます。アップデートの警告を中止する設定が必要ですか?私は掘り続けます。 –

+3

あなたのサーバーは 'TRADITIONAL' SQLモードで動作していると思われます。これはすべての警告をエラーに変換します。 http://dev.mysql.com/doc/refman/5.5/en/server-sql-mode.html#sqlmode_traditional – Mchl

+3

権利。私は実際に正規表現を使用することにしました(そして、コメント(7)REGEXP '^ [0-9] + $')、変換ナンセンスを忘れてしまいました。うまく働いた。助けてくれてありがとう。 –

4

この警告のもう1つの一般的な原因は、変換される文字列の空白です。 をconvert()の前に使用してください。

0

あなたが列データのテキストタイプを使用していて、0としてデフォルト値を設定しようとした場合、ちょうどNULLように設定します。

ALTER TABLE `__table__` 
CHANGE `__column_name__old__` `__column_name__new__` 
INT(4) NOT NULL DEFAULT '0'; 
関連する問題