sql >> データベース >  >> RDS >> Mysql

MySQLでテキスト列にデフォルト値を設定できないのはなぜですか?

    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'");
    


    1. パスワードなしでpsqlコマンドを使用してバッチファイルを実行する

    2. PostgreSQLでクロスデータベースクエリを実行することは可能ですか?

    3. 重複エントリのエラーを処理するにはどうすればよいですか?

    4. SQL Server 2014のプロセッサの選択–パート2