DBVisでこの更新SQLを実行すると、エラーが発生します。(データの切り捨て:行1の '説明'MYSQLが更新中にフィールドを切り捨てるかどうかを確認するにはどうすればいいですか?DBI
しかし、Perl(DBI)では、レコードが切り捨てられた値で実際に更新されたため、これは私に推測しているエラーではありません。
このエラーを表示する方法を教えていただけますか?
DBVisでこの更新SQLを実行すると、エラーが発生します。(データの切り捨て:行1の '説明'MYSQLが更新中にフィールドを切り捨てるかどうかを確認するにはどうすればいいですか?DBI
しかし、Perl(DBI)では、レコードが切り捨てられた値で実際に更新されたため、これは私に推測しているエラーではありません。
このエラーを表示する方法を教えていただけますか?
データの切り捨てによって警告が表示されるため、SHOW WARNINGS
を使用して警告を表示できます。 サーバーのSQL Modeを切り捨てを禁止する値(例:TRADITIONAL
)に設定すると、警告を致命的なエラーにすることができます。
は
ので、
show warnings;
詳細、代わりにエラーの警告として解釈されます:http://dev.mysql.com/doc/refman/5.0/en/faqs-cjk.html#qandaitem-B-11-1-9
あなたはどのようにあなたがチェックされ、「これは私にエラーを与えていません」と言いますそれ?通常は、$DBI::err
または$dbh->errstr
の値をチェックすることで、DBI操作の状態を確認できます。また、接続をオプションRaiseError => 1
で設定すると、エラーを例外として表示させることができます。
利用可能なすべてのオプションの詳細については、documentationを参照し、「err」を検索してください。
RaiseErrorを設定しようとしましたが、何も$ DBI:errまたは$ dbh-> errstrには何も印刷されません。 – Jeremey
RaiseErrorはMySQLが返す実際のエラーを例外にします。デフォルトでは、MySQLにテーブルスキーマに適合しないデータが与えられた場合、それは適合するように設定されます(これは恐ろしいアイデアであり、合理的だと思う人は誰でも撮影する必要があります)。 sql_modeを使用するという上記の答えは、それがより正気な方法で動作するようにします。クエリを実行する前に$ dbh-> do( 'set sql_mode = traditional')を入力してください。 –
@David:そう、エラーは例外になりますが、警告はエラーにはなりません。ユージーンの答えに「警告を表示する」必要があります。 – Ether
これは動作しますが、別のSQL実行を実行する必要があることを意味します。私は元のもので何とかそれを得ることを望んでいた。 – Jeremey
これは確かに正解です。クエリを実行する前に(接続直後に意味をなさば)、$ dbh-> do( "set sql_mode = traditional");を追加します。 - データが収まらない場合は、MySQLが黙ってそれを適合させるのではなく、エラーが発生します。 –
@David: 'connect()'にsql_modeを設定することもできます。例については、http://search.cpan.org/perldoc?DBIを参照してください。 –