Windows MySQL v5はエラーをスローしますが、Linuxおよびその他のバージョンは警告を発するだけです。これは修正する必要があります。 WTF?
MySQLバグトラッカーのバグ#19498としてこれを修正する試みも参照してください:
Bryce Nesbitt、2008年4月4日16:36:
MS Windowsでは、「デフォルトなし」ルールはエラーですが、他のプラットフォームでは警告になることがよくあります。バグではありませんが、寛大なプラットフォームでコードを記述し、後で厳密なプラットフォームで実行すると、これに陥る可能性があります。
個人的には、これはバグだと思います。 「BLOB/TEXT列をデフォルト値にすることはできません」を検索すると、Googleで約2,940件の結果が返されます。それらのほとんどは、あるシステムでは機能するが他のシステムでは機能しないDBスクリプトをインストールしようとしたときの非互換性の報告です。
Linux MySQL v5.0.83-logに最初にデプロイされた、クライアントの1つ用に変更しているWebアプリケーションで同じ問題が発生しています。 WindowsMySQLv5.1.41を実行しています。最新バージョンのphpMyAdminを使用してデータベースを抽出しようとしても、問題のテキスト列のデフォルトは報告されません。それでも、Windowsでインサートを実行しようとすると(Linuxデプロイメントでは正常に機能します)、ABC列にデフォルトがないというエラーが表示されます。明らかなデフォルトを使用して(その列の一意の値の選択に基づいて)テーブルをローカルで再作成しようとすると、非常に便利な BLOB/TEXT列にデフォルト値を設定できません> 。
繰り返しになりますが、プラットフォーム間で基本的な互換性を維持しないことは容認できず、バグです。
MySQL 5(Windows)で厳密モードを無効にする方法:
-
/my.iniを編集して、行を探します
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
-
と交換してください
sql_mode='MYSQL40'
-
MySQLサービスを再起動します(mysql5であると想定)
net stop mysql5 net start mysql5
ルート/管理者アクセス権がある場合は、実行できる可能性があります
mysql_query("SET @@global.sql_mode='MYSQL40'");