在MySQL上创建表时有两个主键

在MySQL上创建表时有两个主键,mysql,database,open-source,composite-primary-key,Mysql,Database,Open Source,Composite Primary Key,我是MySql新手!我试图创建一个具有2个主键或通常称为复合键的表 CREATE TABLE MovedProduct ( MigrationId nvarchar(150) NOT NULL, ContextKey nvarchar(300) NOT NULL, Model varbinary(65535) NOT NULL, ProductVersion nvarchar(32) NOT NULL, primary key(MigrationId,Cont

我是MySql新手!我试图创建一个具有2个主键或通常称为复合键的表

CREATE TABLE MovedProduct
(
   MigrationId nvarchar(150)   NOT NULL,
   ContextKey nvarchar(300)  NOT NULL,
   Model varbinary(65535) NOT NULL,
   ProductVersion nvarchar(32) NOT NULL,
   primary key(MigrationId,ContextKey)
)
但是我遇到了一个我无法理解的错误

Error Code: 1071. Specified key was too long; max key length is 1000 bytes
我不知道如何减小键的大小,因为它们可以达到各自的大小


为了创建表,我需要做什么特殊的事情吗?

您应该减少相关字段的字段长度。。因为有些字符集并不是只使用一个字节作为字符,而是使用更多的字节。。存储这些文件的时间可能超过密钥长度的限制

例如:

您的字符集使用3个字节存储一个字符,然后在示例中使用3*150+3*400=1650

相反,3*64+3*128=576

您应该减少相关字段的字段长度。。因为有些字符集并不是只使用一个字节作为字符,而是使用更多的字节。。存储这些文件的时间可能超过密钥长度的限制

例如:

您的字符集使用3个字节存储一个字符,然后在示例中使用3*150+3*400=1650

如果不需要utf8,请明确指定拉丁语“:

MigrationId varchar(150)  CHARACTER SET latin1  NOT NULL,
ContextKey  varchar(300)  CHARACTER SET latin1  NOT NULL,

如果不需要utf8,则显式指定拉丁语“:

MigrationId varchar(150)  CHARACTER SET latin1  NOT NULL,
ContextKey  varchar(300)  CHARACTER SET latin1  NOT NULL,