我遇到过https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.htmlMySql文档说将varchar列的长度从255扩展到1024只是可以通过算法复制来实现。 我在这里附上文档的片段
但是,当我尝试在表上运行 alter sql 来实现此目的时,我收到了奇怪的结果。我有一个表 table1,其列 col1 为 varchar(255),我在其上运行了 alter sql。
执行以下sql花费了0.07秒
Alter table table1 modify column col1 varchar(1024)
然而,执行以下sql需要26.54秒
Alter table table1 modify column col1 varchar(1024), algorithm=copy
根据文档,此更改操作只能使用复制算法执行,但查询结果显示并非如此。查询在具有 InnoDB 存储引擎的 MySql Db 版本 8.0.32 上运行。有人可以帮助我理解为什么我会观察上述行为吗?
在不指定任何算法的情况下执行 alter Sql 花费了 0.07 秒,但使用复制算法则花费了 26.54 秒。我预计两者都需要 26.54 秒。
VARCHAR(255)
最多允许 255 个字符。例如,如果列声明为 CHARACTER SET utf8mmb4
,则 bytes 的数量最多为 4*255,因此需要 2 个字节的长度开始。
文档可能需要更新;它是十多年前写的。它可能按原样应用于旧默认值
CHARACTER SET latin1
。 (latin1
每个字符只需要 1 个字节。)