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

时间:2017-03-08 17:22:32

标签: 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,ContextKey)
)

但我收到的错误是我无法理解的。

Error Code: 1071. Specified key was too long; max key length is 1000 bytes

我没有减少密钥大小的原因,因为它们可以达到各自的大小。

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

2 个答案:

答案 0 :(得分:2)

你应该减少所涉及字段的字段长度..因为某些字符集不会仅对char使用一个字节,但更多如此...当存储这些文件时可能会限制密钥长度

例如:

CREATE TABLE MovedProduct
(
   MigrationId nvarchar(64)   NOT NULL,
   ContextKey nvarchar(128)  NOT NULL,
   Model varbinary(65535) NOT NULL,
   ProductVersion nvarchar(32) NOT NULL,
   primary key(MigrationId,ContextKey)
)

你的charset使用3个字节存储一个字符然后在你的样本中你有3 * 150 + 3 * 400 = 1650
而是3 * 64 + 3 * 128 = 576

答案 1 :(得分:0)

如果您不需要utf8,请明确指定latin`:

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