错误:BLOB / TEXT栏'多媒体'用于密钥规范而没有密钥长度

时间:2014-04-10 05:34:54

标签: mysql sql navicat

我尝试创建一个用于存储图片,视频或音频的表格,但收到此错误消息:

"错误:BLOB / TEXT栏'多媒体'用于密钥规范而没有密钥长度"

Create Table Multimedia
(
uname varchar(25),
datetime timestamp,
multimedia blob,
primary key (uname,datetime,multimedia),
foreign key (uname) references Entry(uname),
foreign key (datetime) references Entry(datetime)
);

有谁知道修复它?

1 个答案:

答案 0 :(得分:0)

根据Prefixing INDEXes上的文档:

  

索引BLOBTEXT列时,必须指定前缀长度   对于索引。

     

例如:

     

CREATE TABLE test ( blob_col BLOB, INDEX( blob_col( 10 ) ) );

     

前缀最长可达1000个字节(767个字节InnoDB个字节,   除非你设置了innodb_large_prefix

更改您的表格primary key定义如下:

Create Table Multimedia
(
  uname varchar(25),
  datetime timestamp,
  multimedia blob,

  primary key ( uname, datetime, multimedia( 767 ) ), -- <--- changed

  foreign key ( uname ) references Entry( uname ),
  foreign key ( datetime ) references Entry( datetime )
);

您还可以考虑进行设计更改,以将multimedia对象存储在另一个表中,其中包含unique键并具有auto increment主键号。您可以在此表中使用相同的multimedia_id来形成主键,如:

  primary key ( uname, datetime, multimedia_id ),
  foreign key ( uname ) references Entry( uname ),
  foreign key ( datetime ) references Entry( datetime ),
  foreign key ( multimedia_id ) references multimedia_objects( id )