如何将表中Varchar类型列改为Datetime/Timestamp?修改时报错求助
解决方法
问题根源很清楚:你要转换的pickup_time列里存在空字符串(''),而datetime类型不接受这种无效值,所以触发报错。按以下步骤处理即可:
先清理无效数据
把列里的空字符串替换成合法值,比如业务允许的话改成NULL:UPDATE 你的表名 SET pickup_time = NULL WHERE pickup_time = '';要是列里还有其他格式错误的内容(比如'0000-00-00'、乱填的文字),也要一并改成NULL或标准datetime格式(例如'2024-01-01 00:00:00')。
再修改列类型
数据清理完成后,执行修改语句:ALTER TABLE 你的表名 MODIFY COLUMN pickup_time DATETIME;如果需要允许该列存储NULL,或者要设置默认值,可调整为:
ALTER TABLE 你的表名 MODIFY COLUMN pickup_time DATETIME NULL DEFAULT CURRENT_TIMESTAMP;临时应急方案(不推荐)
若不想清理数据,只想临时绕过限制,可先关闭MySQL的严格模式:SET sql_mode = 'NO_ENGINE_SUBSTITUTION';修改完成后记得改回严格模式,防止后续插入无效数据:
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
内容的提问来源于stack exchange,提问作者code sucks
相关产品推荐
相关产品推荐

