GCP Mysql实例未将VARCHAR限制超过3072

问题描述 投票:0回答:1

我们正在为我们的应用程序使用基于GCP的mysql服务器。对于其中一个列,我们需要将varchar的限制从默认值255增加。

请参阅以下查询和错误: -

ALTER TABLE data_key MODIFY COLUMN key VARCHAR(8000);
ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes

这在本地mysql DB上正常工作,但在GCP的mysql上没有。我们是否限制GCP的限制,否则如何限制增加或更改数据类型(最后一个选项)。

show create table data_key的输出:

data_key表

CREATE TABLE data_key ( 
    id int(11) NOT NULL, 
    key varchar(255) DEFAULT NULL, 
    PRIMARY KEY (id), 
    UNIQUE KEY US_mypr3ns15fjs031li0iwa6sdf4nk` (key ) 
)  ENGINE=InnoDB DEFAULT CHARSET=latin1
mysql google-cloud-platform google-cloud-storage
1个回答
0
投票

发生此错误的原因是InnoDB引擎[1]。如果您在Google Cloud上使用MySQL Second Generation,InnoDB是唯一支持的存储引擎[2]。对于MySQL第一代实例,建议使用InnoDB存储引擎。

在InnoDB中,默认情况下启用innodb_large_prefix,对于使用DYNAMIC或COMPRESSED行格式的InnoDB表,索引键前缀限制为3072字节。这是在MySQL 5.5中引入的,用于禁用大索引键前缀,以便与不支持大索引键前缀的早期版本的InnoDB兼容。它在以后的版本中被弃用并删除[3]。

在您的情况下,您可以创建第一代MySQL实例[4],但请注意,对第一代实例的支持将于2020年1月30日结束,并设置另一个存储引擎[5]。


[1] https://en.wikipedia.org/wiki/InnoDB

[2] https://cloud.google.com/sql/docs/mysql/faq#innodb

[3] https://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html#innodb-maximums-minimums

[4] https://cloud.google.com/sql/docs/mysql/create-instance#create-1st-gen

[5] https://dev.mysql.com/doc/refman/5.7/en/storage-engines.html

© www.soinside.com 2019 - 2024. All rights reserved.