mysql表中使用文本字段的问题
这是一个非常直接的问题,但我还没有想出任何解决办法。 场景是我的数据库中有2个表。第二个表的源依赖于第一个表的源URL(可以超过255个字符,所以我使用了文本) 我得到了这个错误- BLOB/TEXT列“SOURCE”在键规范中使用,没有键长度 我在这篇文章中看到了讨论-。mysql表中使用文本字段的问题,mysql,mysql-error-1170,Mysql,Mysql Error 1170,这是一个非常直接的问题,但我还没有想出任何解决办法。 场景是我的数据库中有2个表。第二个表的源依赖于第一个表的源URL(可以超过255个字符,所以我使用了文本) 我得到了这个错误- BLOB/TEXT列“SOURCE”在键规范中使用,没有键长度 我在这篇文章中看到了讨论-。 但无法找到任何解决方案。 我可以从第一个表中删除unique,但不能分配外键约束 我知道文本字段不能是唯一的,因此正在寻找替代项。不幸的是,您无法为整个BLOB和文本编制索引,因为索引键的长度有限 您只能在myasam引擎上
但无法找到任何解决方案。
我可以从第一个表中删除unique,但不能分配外键约束
我知道
文本
字段不能是唯一的,因此正在寻找替代项。不幸的是,您无法为整个BLOB和文本编制索引,因为索引键的长度有限
您只能在myasam引擎上创建全文索引
当我需要实现唯一性约束时,我通常使用包含文本哈希(SHA或MD5)的特定列,以及一些处理哈希冲突的代码
它有点难看,但它可以工作为了匹配长varchar或blob列,您需要指定索引长度:
create table SOURCES (
SOURCES_PK int not null AUTO_INCREMENT primary key,
SOURCE_URL text not null unique,
DESCRIPTION varchar(255),
INDEX source_url (source_url(100)) );
// Key length ----------------^^^
对于MyISAM
最大密钥长度为1000字节。这也可以通过更改源代码和重新编译来更改。对于长度超过250字节的密钥,将使用比默认值1024字节更大的密钥块大小
用于InnODB
索引键前缀最多可为767字节。见”
请参阅:mysql的哪个版本?根据文档“VARCHAR列中的值是可变长度字符串。在MySQL 5.0.3之前,长度可以指定为0到255,在5.0.3及更高版本中,长度可以指定为0到65535。”此外,为什么不引用第一个表的主键呢?谢谢AllisconC。现在我引用的是primary key.Blob/text列可以被索引,但整个字段只有有限的子集,767或1000字节,这取决于引擎:谢谢你的时间,Johan。但现在我引用的是主键。@Anna使用PK的总是最好的:-)
create table SOURCES (
SOURCES_PK int not null AUTO_INCREMENT primary key,
SOURCE_URL text not null unique,
DESCRIPTION varchar(255),
INDEX source_url (source_url(100)) );
// Key length ----------------^^^