MySQL Incorrect datetime value: '0000-00-00 00:00:00'

后端 未结 19 961
没有蜡笔的小新
没有蜡笔的小新 2020-11-29 15:51

I\'ve recently taken over an old project that was created 10 years ago. It uses MySQL 5.1.

Among other things, I need to change the default character set from latin1

相关标签:
19条回答
  • 2020-11-29 16:43

    You can change the type of created field from datetime to varchar(255), then you can set (update) all records that have the value "0000-00-00 00:00:00" to NULL.

    Now, you can do your queries without error. After you finished, you can alter the type of the field created to datetime.

    0 讨论(0)
  • 2020-11-29 16:48

    I had a similar problem but in my case some line had the value NULL.

    so first I update the table:

    update `my_table`set modified = '1000-01-01 00:00:00' WHERE modified is null
    

    problem solved, at least in my case.

    0 讨论(0)
  • 2020-11-29 16:48

    My solution

    SET sql_mode='';
    UPDATE tnx_k2_items
    SET created_by = 790
    , modified = '0000-00-00 00:00:00'
    , modified_by = 0
    
    0 讨论(0)
  • 2020-11-29 16:51

    Here what my solution PhpMyAdmin / Fedora 29 / MySQL 8.0 (for example):

    set sql_mode='SOMETHING'; doesn't work, command call successful but nothing was change.

    set GLOBAL sql_mode='SOMETHING'; change global configuration permanent change.

    set SESSION sql_mode='SOMETHING'; change session configuration SESSION variable affects only the current client.

    https://dev.mysql.com/doc/refman/8.0/en/sql-mode.html

    So I do this :

    • Get SQL_MODE : SHOW VARIABLES LIKE 'sql_mode';
    • Result : ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    • Remove on the result : NO_ZERO_IN_DATE,NO_ZERO_DATE
    • Set new configuration : set GLOBAL SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

    You can remove or add other mode in the same way.

    This is helpful to change global for using and testing frameworks or sql_mode must be specified in each file or bunch of queries.

    Adapted from a question ask here : how-can-i-disable-mysql-strict-mode

    Example : install latest Joomla 4.0-alpha content.

    Edit: In PhpMyadmin, if you have the control of the server, you can change the sql_mode (and all others parameters) directly in Plus > Variables > sql_mode

    0 讨论(0)
  • 2020-11-29 16:52

    Instead of

    UPDATE your_table SET your_column = new_valid_value where your_column = '0000-00-00 00:00:00';
    

    Use

    UPDATE your_table SET your_column = new_valid_value where your_column = 0;
    
    0 讨论(0)
  • 2020-11-29 16:54

    I also got

    SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '0000-00-00 00:00:00' for column

    error info

    Fix this by changing 0000-00-00 00:00:00 to 1970-01-01 08:00:00

    1970-01-01 08:00:00 unix timestamp is 0

    0 讨论(0)
提交回复
热议问题