2010-12-13 7 views
4

DBVisでこの更新SQLを実行すると、エラーが発生します。(データの切り捨て:行1の '説明'MYSQLが更新中にフィールドを切り捨てるかどうかを確認するにはどうすればいいですか?DBI

しかし、Perl(DBI)では、レコードが切り捨てられた値で実際に更新されたため、これは私に推測しているエラーではありません。

このエラーを表示する方法を教えていただけますか?

答えて

6

データの切り捨てによって警告が表示されるため、SHOW WARNINGSを使用して警告を表示できます。 サーバーのSQL Modeを切り捨てを禁止する値(例:TRADITIONAL)に設定すると、警告を致命的なエラーにすることができます。

+0

これは動作しますが、別のSQL実行を実行する必要があることを意味します。私は元のもので何とかそれを得ることを望んでいた。 – Jeremey

+2

これは確かに正解です。クエリを実行する前に(接続直後に意味をなさば)、$ dbh-> do( "set sql_mode = traditional");を追加します。 - データが収まらない場合は、MySQLが黙ってそれを適合させるのではなく、エラーが発生します。 –

+2

@David: 'connect()'にsql_modeを設定することもできます。例については、http://search.cpan.org/perldoc?DBIを参照してください。 –

2

あなたはどのようにあなたがチェックされ、「これは私にエラーを与えていません」と言いますそれ?通常は、$DBI::errまたは$dbh->errstrの値をチェックすることで、DBI操作の状態を確認できます。また、接続をオプションRaiseError => 1で設定すると、エラーを例外として表示させることができます。

利用可能なすべてのオプションの詳細については、documentationを参照し、「err」を検索してください。

+0

RaiseErrorを設定しようとしましたが、何も$ DBI:errまたは$ dbh-> errstrには何も印刷されません。 – Jeremey

+1

RaiseErrorはMySQLが返す実際のエラーを例外にします。デフォルトでは、MySQLにテーブルスキーマに適合しないデータが与えられた場合、それは適合するように設定されます(これは恐ろしいアイデアであり、合理的だと思う人は誰でも撮影する必要があります)。 sql_modeを使用するという上記の答えは、それがより正気な方法で動作するようにします。クエリを実行する前に$ dbh-> do( 'set sql_mode = traditional')を入力してください。 –

+0

@David:そう、エラーは例外になりますが、警告はエラーにはなりません。ユージーンの答えに「警告を表示する」必要があります。 – Ether

関連する問題