当前位置: 首页>数据库>正文

MySQL 更改varchar列长度需注意的事

文章目录

  • 问题示例
  • 引用官方
  • 注意总结

问题示例

ERROR 1846 (0A000): ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.

如上报错发生在,MySQL 5.7 版本,对表字段(varchar)长度进行更改。

表结构如下:

CREATE TABLE `t1` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `c1` varchar(10) NOT NULL,
  `c2` varchar(20) NOT NULL,
  `c3` varchar(20) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_c123` (`c1`,`c2`)
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb4 

DDL SQL 如下:

ALTER TABLE t1 MODIFY COLUMN C1 varchar(100) NOT NULL,ALGORITHM=INPLACE, LOCK=NONE;

引用官方

注意总结

总结更改 varchar 列长度的限制如下:

  1. 从 0 到 255 字节的更改:可以在 inplace 进行。因为这种情况下,长度字节的数量(1个)不会改变。
  2. 从 256 字节或更多到更大的更改:同样可以 inplace 进行,因为长度字节的数量(2个)也不会改变。
  3. 从小于 256 字节到 256 字节或更多的更改:这不能通过 inplace 进行,因为长度字节的数量会从 1 个变为 2 个。这种更改需要复制整个表(需要使用 ALGORITHM=COPY ),因为需要额外的空间来存储新的长度字节。
  4. 减少长度的更改,同样不支持 inplace 。

在对 varchar 列进行长度更改时,需注意上述问题限制,避免执行过程因为锁表对业务产生影响,以及执行指定 inplace 算法出现报错时的问题排查。


https://www.xamrdz.com/database/6rx1848898.html

相关文章: