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

ER_TRUNCATED_WRONG_VALUE:日付時刻の値が正しくありません

    どうやら、日時の値は有効なMySQL日時 ではありません 。ただし、サーバーSQLモード

    何らかの理由で、私の開発サーバーでは、MySQLのデフォルトモード構成が完全に削除されました。したがって、日時を挿入する方法に制限はありませんでした。

    mysql> select @@sql_mode;
        +------------+
        | @@sql_mode |
        +------------+
        |            |
        +------------+
        1 row in set (0.00 sec)
    

    一方、本番サーバーでは、どのような種類の日時形式を受け入れるかをmysqlサーバーに指示する多くの制限がありました。

    mysql> select @@sql_mode;
    +-------------------------------------------------------------------------------------------------------------------------------------------+
    | @@sql_mode                                                                                                                                |
    +-------------------------------------------------------------------------------------------------------------------------------------------+
    | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
    +-------------------------------------------------------------------------------------------------------------------------------------------+
    

    これは安全な方法ではありませんが、MySQLの制限モードをno_engine_substitutionに変更しました 、そして出来上がり、すべてが魅力のように機能します(ほぼ)。これを機能させるには、GLOBALモードとSESSIONモードを変更する必要があります。

    標準のSQLモードは「NO_ENGINE_SUBSTITUTION」なので、モードをそれに設定します。タフに追加できるモードは他にもあります:

    SET GLOBAL sql_mode = '<mode>';
    SET SESSION sql_mode = '<mode>';
    

    これで、GLOBALモードとSESSIONモードをNO_ENGINE_SUBSTITUTION

    に設定する必要があります。
    mysql> SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';
    mysql> SELECT @@SESSION.sql_mode;
    +------------------------+
    | @@SESSION.sql_mode     |
    +------------------------+
    | NO_ENGINE_SUBSTITUTION |
    +------------------------+
    1 row in set (0.00 sec)
    
    mysql> SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION';
    mysql> SELECT @@GLOBAL.sql_mode;
    +------------------------+
    | @@GLOBAL.sql_mode      |
    +------------------------+
    | NO_ENGINE_SUBSTITUTION |
    +------------------------+
    1 row in set (0.00 sec)
    


    1. ORDERBYフィールドを選択せず​​にDISTINCT行を選択する方法

    2. c#でpostgresql関数の結果を返す方法は?コンソール出力が空

    3. レイキャスティングアルゴリズムのMySQL実装?

    4. SQL Server(T-SQL)の日付から年の日を取得する