代码之家  ›  专栏  ›  技术社区  ›  kriti

在Mysql 8.x数据库和InnoDB存储中,将varchar列大小从255个字符扩展到1024个字符似乎没有使用复制算法

  •  1
  • kriti  · 技术社区  · 1 年前

    我遇到过 https://dev.mysql.com/doc/refman/8.0/en/innodb-online-ddl-operations.html MySql文档指出,将varchar列的长度从255扩展到1024只能通过算法副本实现。 我在这里附上了一段文档的片段 enter image description here

    然而,当我试图在表上运行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
    

    根据文档,此更改操作只能使用复制算法执行,但查询结果显示为其他方式。查询在MySql-Db 8.0.32版本上运行,使用InnoDB存储引擎。有人能帮我理解为什么我会观察到提到的行为吗?

    另一个观察结果是,在有/没有复制算法的情况下,将varchar的长度从1024减少到255需要26.54秒,这推断出减少它确实是在使用复制算法,那么为什么反向操作不会这样做呢?

    在没有指定任何算法的情况下,执行alter-Sql需要0.07秒,但使用复制算法需要26.54秒。我预计两者都需要26.54秒。

    0 回复  |  直到 1 年前
        1
  •  0
  •   Rick James diyism    1 年前

    VARCHAR(255) 最多允许255 人物 。例如,如果列被声明 CHARACTER SET utf8mmb4 ,那么数量 字节 因此需要2个字节的长度作为开始。

    文件可能需要更新;这是十多年前写的。它可以按原样适用于 CHARACTER SET latin1 ,旧的默认设置。( latin1 每个字符只需要1个字节。)