我们正在为我们的应用程序使用基于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
答案 0 :(得分: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