Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql表中使用文本字段的问题_Mysql_Mysql Error 1170 - Fatal编程技术网

mysql表中使用文本字段的问题

mysql表中使用文本字段的问题,mysql,mysql-error-1170,Mysql,Mysql Error 1170,这是一个非常直接的问题,但我还没有想出任何解决办法。 场景是我的数据库中有2个表。第二个表的源依赖于第一个表的源URL(可以超过255个字符,所以我使用了文本) 我得到了这个错误- BLOB/TEXT列“SOURCE”在键规范中使用,没有键长度 我在这篇文章中看到了讨论-。 但无法找到任何解决方案。 我可以从第一个表中删除unique,但不能分配外键约束 我知道文本字段不能是唯一的,因此正在寻找替代项。不幸的是,您无法为整个BLOB和文本编制索引,因为索引键的长度有限 您只能在myasam引擎上

这是一个非常直接的问题,但我还没有想出任何解决办法。 场景是我的数据库中有2个表。第二个表的源依赖于第一个表的源URL(可以超过255个字符,所以我使用了文本)

我得到了这个错误-

BLOB/TEXT列“SOURCE”在键规范中使用,没有键长度

我在这篇文章中看到了讨论-。
但无法找到任何解决方案。
我可以从第一个表中删除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 ----------------^^^