我是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
我没有减少密钥大小的原因,因为它们可以达到各自的大小。
为了创建我的表,我需要做些什么特别的事情吗?
答案 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,