在数据库管理,ALTER TABLE操作的一个至关重要的部分修改数据库结构。MySQL,流行的数据库管理系统,提供在线操作自5.6版本,提供一种方便的方法来执行这些改变没有锁定的表。然而,有些警告。在这个博客中,我们将探索在线改变VARCHAR列的过程,深入研究见解而扩大这些列的大小。

开始我们的旅程,让我们考虑一个表定义,需要一个名为“_varchar”的VARCHAR列的扩张来容纳更多的数据。这是原始表定义:

我们执行最初的ALTER TABLE命令:

出现变更成功,我们看到表定义相应的修改。

现在,让我们尝试后续变更——试图扩大到200人。令人惊讶的是,当我们试图提高VARCHAR列长度到200年,我们遇到一个错误:

DDL否认,MySQL建议使用复制算法。命令与算法改变了去复制和共享锁如下,并成功执行改变VARCHAR列:

理解就地改变的极限

为什么MySQL否认在线改变(算法=原地)修改VARCHAR列长度200虽然最初,它允许对提高这85 ?

我们得到答案从文档本身,这与VARCHAR如何存储数据,实际上前缀数据。在MySQL中,VARCHAR值存储为一个或两字节长度的前缀+数据。前缀长度取决于大数据。数据长度最多255个字节,使用只有一个字节的前缀,但是值超过255字节,前缀长度要求是两个字节。因此就地ALTER TABLE只支持增加VARCHAR列大小从0到255字节或从256字节到更大的尺寸。它不允许原地改变时,改变需要扩展前缀长度。

看到这,你可以查询information_schema列的表。最初,列长度ALTER-ed到85的时候,注意下面的细节。

这里,CHARACTER_MAXIMUM_LENGTH指定长度的字符存储在列,而CHARACTER_OCTET_LENGTH指定长度的字节。注意,对于这个专栏,字节长度已经255年,进一步增加需要MySQL扩展VARCHAR前缀大小两个字节。200年改变VARCHAR列大小之后,下面是存储需求。

如何在线改变VARCHAR列在这种情况下吗

当面对在线ALTER TABLE VARCHAR列的限制在MySQL,考虑使用一个很好的替代品雷竞技下载官网Percona工具包pt-online-schema-change。众所周知,行业标准工具,Percona工具包的一部分,执行在线更改以最少的停机时间。雷竞技下载官网

ALTER TABLE改变VARCHAR列的字符集

还要记住的是,这也意味着改变列的字符集。当然,一个字符集定义了存储需求,和改变字符集也导致增加所需的字节数。因此你还需要考虑而做出改变。检查下面的示例,您可以看到存储85字节的VARCHAR长度,长度增加了340年而不是255年以前。

结论

在线ALTER TABLE操作MySQL数据库管理带来灵活性,但是他们有特定的限制,尤其是在处理VARCHAR列。了解底层存储机制成功的改变是至关重要的。复制算法可以帮助管理VARCHAR扩张超出了255字节的限制,但pt-online-schema-change可以派上用场来执行操作以最小的问题。

雷竞技下载官网Percona MySQL是最完整,分布稳定、可伸缩的、安全的MySQL开源解决方案,提供企业级的数据库环境最关键业务应用程序…和它的免费使用!

raybetapp2下载

订阅
通知的
客人

0评论
内联反馈
查看所有评论