表users
设计不良。created_at
和updated_at
记录是用VARCHAR类型设置的,并且将值长时间放置在它们中的格式为20.10.2017 8:10
。
在MySQL中,必须将字段转换为DATETIME
类型,并保存先前输入的值。
STR_TO_DATETIME
函数不适用,因为它会更改输出格式,但不会将表中的VARCHAR
数据类型本身更改为DATETIME
数据类型。
ALTER TABLE users MODIFY created_at DATETIME
不起作用
错误消息:
SQL错误[1292] [22001]:数据截断:错误的日期时间值:第1行的列'created_at'为'06 .01.2020 8:10'
当您将列从VARCHAR
更改为DATETIME
时,您无法指定字符串的自定义解析,它必须采用MySQL的默认格式。
所以您需要分多个步骤进行:
STR_TO_DATE()
解析VARCHAR列来填充新列>ALTER TABLE users ADD created_at_dt DATETIME, updated_at_dt DATETIME;
UPDATE users
SET created_at_dt = STR_TO_DATE(created_at, '%d.%m.%Y %h:%i'),
updated_at_dt = STR_TO_DATE(updated_at, '%d.%m.%Y %h:%i');
ALTER TABLE users
DROP created_at, DROP updated_at,
RENAME COLUMN created_at_dt TO created_at, RENAME COLUMN updated_at_dt TO updated_at;
最简单的解决方法是创建新的created_at
和updated_at
DATETIME
列,为它们分配已解析的日期值,然后删除旧列并重命名新列。例如:
您的日期具有错误的格式,将其转换为正确的mysql时间,然后更改表