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
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
.
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.
My solution
SET sql_mode='';
UPDATE tnx_k2_items
SET created_by = 790
, modified = '0000-00-00 00:00:00'
, modified_by = 0
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 :
SHOW VARIABLES LIKE 'sql_mode';
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
NO_ZERO_IN_DATE,NO_ZERO_DATE
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
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;
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