MySQL修改列类型为INT时报错1366、1064是什么原因?
MySQL修改列数据类型报错问题解答
报错原因说明
你遇到的两个报错均不是CSV源数据第一行是列名导致的,两个报错的独立诱因如下:
- 错误码1064(语法错误):
MySQL中ALTER COLUMN语法仅支持修改列的默认值、删除默认值等操作,无法直接修改列的数据类型,所以你写的SQL语句本身不符合MySQL语法规范,触发语法报错。 - 错误码1366(值转换错误):
报错提示存在空字符串''无法转换为INT类型,说明你表中现存的total_deaths列里有大量空字符串格式的异常值。如果是CSV表头被导入到表中导致的错误,报错信息会明确提示无法将'total_deaths'字符串转为INT,和你收到的报错内容不符,因此可以排除表头导入的问题。这个错误通常是CSV中的空值在导入时被默认存储为空字符串导致的。
解决步骤
- 先清空列中的空字符串异常值,将其转换为合法的NULL值:
UPDATE covidworlddata.coviddeaths SET total_deaths = NULL WHERE total_deaths = '';
如果需要排查其他非数字异常值,可以执行以下查询确认后处理:
SELECT * FROM covidworlddata.coviddeaths WHERE total_deaths NOT REGEXP '^[0-9]+$' AND total_deaths IS NOT NULL AND total_deaths != '';
- 使用正确的MySQL修改列类型语法执行修改操作:
ALTER TABLE covidworlddata.coviddeaths MODIFY COLUMN total_deaths INT NULL;
如果你需要给列设置非空约束或者默认值,可以在上述语句中自行补充对应配置。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

