繁体   English   中英

如何在 liquibase 中将前缀索引定义为主键?

[英]How to define prefix index as primary key in liquibase?

我有一个表,其中的主键值可以很长。

当我尝试重新定义主列长度时,出现以下错误

liquibase.exception.DatabaseException: Specified key was too long; max key length is 3072 bytes

我猜上面的错误是由于 MySQL 的默认最大索引大小引起的,所以我的下一个最佳选择 atm 似乎是用前缀索引定义这个主键(或者可能以某种方式在这里扩展最大索引长度)。

有什么办法可以用 liquibase 做到这一点吗?

我不知道如何让 Liquibase 定义带有索引前缀的主键,但无论如何使用索引前缀都无济于事。

https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html说:

object 键名是 Unicode 个字符的序列,使用 UTF-8 编码,最长为 1,024 个字节。

因此它介于 255 到 1024 个字符之间,具体取决于有多少字符是多字节的。

但是 MySQL 索引前缀语法以字符而不是字节为单位测量长度。

因此,您需要定义长度为 1024 的索引前缀来处理 S3 密钥,但这对于 MySQL 索引定义来说太长了。

您必须将不同的列定义为该表中的主键。 例如,您可以使用 S3 object 密钥名称的 MD5() hash,并将其存储在 CHAR(32) 或 BINARY(16)中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM