如何正确处理MySql中的长键约束(长度超过3072)?

如何正确处理MySql中的长键约束(长度超过3072)?,mysql,sql,database,database-design,Mysql,Sql,Database,Database Design,我可以看到,关于这个问题,有类似的问题和答案。 我需要在7列上创建一个唯一的约束 alter table ga_data_model add constraint uq_1234596 unique (portal_id,date,dimension,country,os,os_version,theme); 使用前缀键来解决这个问题有各种各样的答案。但是,由于数据的性质,仅使用前一两个字符创建索引是危险的,因为这可能会导致重复的结果。所以这样的解决方案对我不起作用: alter table

我可以看到,关于这个问题,有类似的问题和答案。 我需要在7列上创建一个唯一的约束

alter table ga_data_model add constraint uq_1234596 unique (portal_id,date,dimension,country,os,os_version,theme);
使用前缀键来解决这个问题有各种各样的答案。但是,由于数据的性质,仅使用前一两个字符创建索引是危险的,因为这可能会导致重复的结果。所以这样的解决方案对我不起作用:


alter table ga_data_model add constraint uq_1234596 unique (portal_id,date(2),dimension(2),country(1),os(2),os_version(1),theme(2));
我正在考虑在我的表中创建一个新列,其中包含这些列的计算哈希值,并在此列上创建约束。但这意味着每次我想在db中插入一些内容时,我都需要首先为此列执行一个select,计算新值的哈希值,比较它们并保存/或不保存。考虑到我将有很多写操作,我认为这有点太贵了

有没有人遇到过和我上面解释的相同的问题,并且有更好的解决方案? 谢谢

我想在db中插入一些内容,首先需要对该列进行选择,计算新值的哈希值,比较它们并保存/或不保存


否-您保存它,如果您得到唯一的密钥冲突,那么您已经拥有了数据。另外,将散列计算实现为表触发器-这样就没有后门来修改数据。

编辑您的问题,并粘贴到表的CREATETABLE语句中。还要粘贴一些INSERT语句。我觉得奇怪的是,这七列总共有3kb的数据。