1. ホーム
  2. mysql

[解決済み】MySQLでテキストカラムにデフォルト値を設定できないのはなぜですか?

2022-04-11 10:15:32

質問

テーブルに TEXT カラムを作成し、MySQL でそれにデフォルト値を与えようとすると、エラーが発生します(少なくとも Windows で)。テキストカラムがデフォルト値を持つべきでない理由が見当たりません。MySQL のドキュメントにも説明がありません。私には非論理的に思えます(そして、デフォルト値が欲しいので、多少イライラします!)。なぜこれが許されないのか、どなたかご存知ですか?

解決方法は?

Windows の MySQL v5 ではエラーが発生するが、Linux やその他のバージョンでは警告が表示されるだけである。 これは修正する必要がある。 WTF?

また、MySQL Bugtracker のバグ#19498 として、これを修正しようとする試みも参照してください。

ブライス・ネスビット 2008年4月4日 16時36分

MS Windows では、"no DEFAULT" ルールはエラーになりますが、他のプラットフォームでは警告になることがよくあります。バグではありませんが、甘いプラットフォームでコードを書き、後で厳しいプラットフォームで実行すると、これに引っかかる可能性があります。

個人的には、これはバグと捉えています。 BLOB/TEXT column can't have a default value"で検索すると、Googleで約2,940件の検索結果が表示されます。 そのほとんどは、あるシステムでは動作したが他のシステムでは動作しなかったDBスクリプトをインストールしようとしたときの非互換性に関する報告です。

私は今、あるクライアントのために修正中のウェブアプリケーションで同じ問題に遭遇しており、元々は Linux MySQL v5.0.83-log でデプロイされていました。 私はWindows MySQL v5.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
    
    

root/admin 権限がある場合は、以下のように実行することができます。

mysql_query("SET @@global.sql_mode='MYSQL40'");