MySQL Error number: MY-012143; Symbol: ER_IB_MSG_318; SQLSTATE: HY000 报错 故障修复 远程处理
文档解释
Error number: MY-012143; Symbol: ER_IB_MSG_318; SQLSTATE: HY000
Message: %s
错误说明
MySQL 错误代码 MY-012143(ER_IB_MSG_318)指示引发的错误:在修改列定义时被禁止操作。当更改表中已有列的定义时,MySQL 经常会引发这个错误,提示无法执行操作。
ER_IB_MSG_318 错误码是 InnoDB 模块发出的错误,只有当使用 InnoDB 时才会出现 ER_IB_MSG_318 错误。
常见案例
常见案例
ALTER TABLE mytable_innodb MODIFY COLUMN mycolumn VARCHAR(255);
MySQL 将返回下面的错误信息:
Error Code: 1273. Field of table ‘mytable_innodb’ doesn’t have a default value [ER_IB_MSG_318]
解决方法
解决 ER_IB_MSG_318 错误的方法有多种,取决于出现错误时的实际情况。所以,在尝试解决这个错误之前,应首先分析其出现的原因和对应的附加信息,以便于采用最适合的解决方法。一般来说,修复 MySQL 是最简单的方法,可以尝试重启 MySQL 实例:
重启 MySQL 服务:
sudo service mysql restart
或者在终端中输入:
/etc/init.d/mysql restart
另一个有效的解决方法是在更改列定义时指定字段的默认值:
ALTER TABLE mytable_innodb MODIFY COLUMN mycolumn VARCHAR(255) DEFAULT ”;
另外还可以尝试使用 ALTER TABLE 命令的 NOCHECK CONSTRAINT 子句来暂时禁用约束,然后再更新字段定义。一旦完成,就可以使用 CHECK CONSTRAINT 子句来重新检查约束。
例如:
ALTER TABLE mytable_innodb NOCHECK CONSTRAINT ALL;
ALTER TABLE mytable_innodb MODIFY COLUMN mycolumn VARCHAR(255);
ALTER TABLE mytable_innodb CHECK CONSTRAINT ALL;
有时候,可能需要在列定义中显式指定类型注释:
ALTER TABLE mytable_innodb MODIFY COLUMN mycolumn VARCHAR(255) COMMENT “type varchar(255)”;
另外,也可以考虑使用 DROP COLUMN 和 ADD COLUMN SQL 语句来更改列定义,这样也可以防止出现 ER_IB_MSG_318 错误:
ALTER TABLE mytable_innodb DROP COLUMN mycolumn;
ALTER TABLE mytable_innodb ADD COLUMN mycolumn VARCHAR(255);