2010-11-30 5 views
3

MySQL 5.0から5.1へのアップグレード後に失敗した古いアプリケーションがあります。MySQLを強制的にTRADITIONALモードから解除する方法は?

これは、以前は自動的に妥当なものに変換された特定のタイプの「無効な」値を挿入しないようにする「厳密モード」によるものであることが示されました。

私はSET @@SESSION.sql_mode = ''SET @@GLOBAL.sql_mode = ''を試しましたが、まだエラーが発生します。

my.inisql_modeもコメントしました。

この問題を解決するために、より強力な「核」オプションがありますか?無効な日付を許可する

+3

これらの*合理的な置換は '0000-00-00'の日付、ENUMのフィールドの空文字列などの外部キーを含んでいます。私の経験では、 'WHERE start_date IS NULLが期待どおりに動作しないため、 'WHERE start_date IS NULL OR start_date = '0000-00-00''にする必要があります。運用環境に適切なSQLモードを適用してパッチを適用するだけでなく、開発ボックスに厳密なモードを適用してアプリケーションを修正しようとする必要があります。 –

答えて

5

私は通常、それぞれの新しい接続で

SET SESSION sql_mode = 'ANSI_QUOTES,TRADITIONAL' 

を発行することにより、MySQLの接続は、伝統的なモードを使用していることを確認してください。私はあなたがちょうど発行する場合、新しい接続ごとに

SET SESSION sql_mode = '' 

という問題を解決したと思います。

あなたは

SET GLOBAL sql_mode = '' 

を発行することにより、新しい接続のデフォルトのSQLモードを変更することができるはずですが、あなたがこれを行うのに十分な権限を持つアカウントを使用する必要がありますか、それは動作しません。

あなたのアプリケーションで特定のSQLモードが動作していることを確認したい場合は、これを行う最も堅牢な方法は、新しい接続ごとに設定することです。

+0

ありがとう...明らかに私の問題は構文でした。 SET SESSION sql_modeは動作しますが、SET @@ SESSION.sql_modeは動作しません。私はこれをすべてのストアドプロシージャに入れなければならないようにも見えます。 –

+0

すべてのストアドプロシージャに配置する必要はありません。ストアドプロシージャが実行されると、SQLモードはプロシージャが定義されたときに有効なSQLモードに一時的に変更されます。選択したSQLモードを有効にして、すべてのストアドプロシージャを一度だけ再定義することができます。または、十分な特権を持つアカウントを持っている場合は、関連するINFORMATION_SCHEMAテーブルのUPDATEクエリを実行して、プロシージャのSQLモード設定を変更できます。 – Hammerite

0

、次のものが必要です。

SET sql_mode = 'ALLOW_INVALID_DATES'; 

しかし、あなたはもっと自分のアプリケーションを修正すると思います。私のアプリケーションで

関連する問題