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);


数据运维技术 » MySQL Error number: MY-012143; Symbol: ER_IB_MSG_318; SQLSTATE: HY000 报错 故障修复 远程处理