如何使mysql字段唯一?

如何使mysql字段唯一?,mysql,field,unique,Mysql,Field,Unique,有没有办法使现有的txt字段唯一—不接受重复的值 字段:post_标题 类型:文本 排序规则:utf8\U unicode\U ci 空:Sim卡 默认值:NULL 如果有人试图插入一篇带有现有标题的文章,会发生什么 这会影响我网站的某些功能吗 结构 CREATE TABLE IF NOT EXISTS `hotaru_posts` ( `post_id` int(20) NOT NULL AUTO_INCREMENT, `post_archived` enum('Y','N') COL

有没有办法使现有的txt字段唯一—不接受重复的值

字段:post_标题 类型:文本 排序规则:utf8\U unicode\U ci 空:Sim卡 默认值:NULL

如果有人试图插入一篇带有现有标题的文章,会发生什么

这会影响我网站的某些功能吗

结构

CREATE TABLE IF NOT EXISTS `hotaru_posts` (
  `post_id` int(20) NOT NULL AUTO_INCREMENT,
  `post_archived` enum('Y','N') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'N',
  `post_updatedts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `post_author` int(20) NOT NULL DEFAULT '0',
  `post_date` timestamp NULL DEFAULT NULL,
  `post_pub_date` timestamp NULL DEFAULT NULL,
  `post_status` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'processing',
  `post_type` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
  `post_category` int(20) NOT NULL DEFAULT '1',
  `post_tags` text COLLATE utf8_unicode_ci,
  `post_title` text COLLATE utf8_unicode_ci,
  `post_orig_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `post_domain` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `post_url` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `post_content` text COLLATE utf8_unicode_ci,
  `post_votes_up` smallint(11) NOT NULL DEFAULT '0',
  `post_votes_down` smallint(11) NOT NULL DEFAULT '0',
  `post_comments` enum('open','closed') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'open',
  `post_media` varchar(20) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'text',
  `post_img` text COLLATE utf8_unicode_ci NOT NULL,
  `post_subscribe` tinyint(1) NOT NULL DEFAULT '0',
  `post_updateby` int(20) NOT NULL DEFAULT '0',
  `post_views` int(20) NOT NULL DEFAULT '0',
  `post_last_viewer_ip` varchar(32) COLLATE utf8_unicode_ci NOT NULL DEFAULT '111.111.111.111',
  PRIMARY KEY (`post_id`),
  KEY `post_archived` (`post_archived`),
  KEY `post_status` (`post_status`),
  KEY `post_type` (`post_type`),
  FULLTEXT KEY `post_title` (`post_title`,`post_domain`,`post_url`,`post_content`,`post_tags`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='Story Posts' AUTO_INCREMENT=38275 ;
试试这个:

ALTER TABLE tableName   
  ADD  UNIQUE INDEX `post_title_Index` (`post_title`);
试试这个:

ALTER TABLE tableName   
  ADD  UNIQUE INDEX `post_title_Index` (`post_title`);

我认为您需要在post_title字段中添加一个长度。给它一些数字,这应该可以解决错误

ALTER TABLE `hotaru_posts` 
  ADD  UNIQUE INDEX `post_title_Index` (`post_title`,`value`(255));

试试看

我认为您需要在post_title字段中添加一个长度。给它一些数字,这应该可以解决错误

ALTER TABLE `hotaru_posts` 
  ADD  UNIQUE INDEX `post_title_Index` (`post_title`,`value`(255));

试试看

这里发生错误是因为MySQL只能索引BLOB或文本列的前N个字符。因此,错误主要发生在存在文本或BLOB的字段/列类型时,或者那些属于文本或BLOB类型的字段/列类型时,例如您尝试将其作为主键或索引的TINYBLOB、MEDIUMBLOB、LONGBLOB、TINYTEXT、MEDIUMTEXT和LONGTEXT。对于没有长度值的full BLOB或TEXT,MySQL无法保证列的唯一性 它的大小是可变的和动态的。因此,当使用BLOB或文本类型作为索引时,必须提供N的值,以便MySQL可以确定密钥长度。然而,MySQL不支持对文本或BLOB的限制。TEXT88根本不起作用

因此,解决方案是删除文本并设置为VARCHAR数据类型,长度为255。默认长度为

`post_title` varchar(255) COLLATE utf8_unicode_ci UNIQUE KEY

这里发生错误是因为MySQL只能索引BLOB或文本列的前N个字符。因此,错误主要发生在存在文本或BLOB的字段/列类型时,或者那些属于文本或BLOB类型的字段/列类型时,例如您尝试将其作为主键或索引的TINYBLOB、MEDIUMBLOB、LONGBLOB、TINYTEXT、MEDIUMTEXT和LONGTEXT。对于没有长度值的full BLOB或TEXT,MySQL无法保证列的唯一性 它的大小是可变的和动态的。因此,当使用BLOB或文本类型作为索引时,必须提供N的值,以便MySQL可以确定密钥长度。然而,MySQL不支持对文本或BLOB的限制。TEXT88根本不起作用

因此,解决方案是删除文本并设置为VARCHAR数据类型,长度为255。默认长度为

`post_title` varchar(255) COLLATE utf8_unicode_ci UNIQUE KEY


可能的重复没有帮助,所有的查询都会给出相同的错误1170-BLOB/TEXT列“post_title”在密钥规范中使用,没有密钥长度不要使帖子标题唯一,这不是必需的,帖子id是唯一的,因此当有人在任何帖子上投票时,您将根据帖子id更新该行,这样它就不会产生问题可能重复该行没有帮助,所有查询都会出现相同的错误1170-关键字规范中使用的BLOB/TEXT列“post\u title”没有关键字长度不要使帖子标题唯一不需要,帖子id是唯一的,因此当有人对任何帖子进行投票时,您将根据post_id更新该行,这样它就不会创建problemERROR 1170-BLOB/TEXT列“post_title”在没有键长度的键规范中使用。您可以发布架构以便我们可以重现问题吗?对不起,您是什么意思?你说的是哪种模式?模式意味着表的结构。请检查第一篇文章,添加了模式。错误1170-在键规范中使用的BLOB/TEXT列“post_title”没有键长度。你能发布模式以便我们重现问题吗?对不起,你是什么意思?你说的是哪种模式?模式指的是你表格的结构。请检查第一篇文章,添加模式。你能告诉完整的句子来进行转换吗?如果你已经创建了表格,那么写下这个。alter table hotaru_posts更改post_title post_title varchar255 COLLATE utf8_unicode_ci唯一键;你能告诉完整的句子来进行转换吗?如果你已经创建了表格,那么写下这个。alter table hotaru_posts更改post_title post_title varchar255 COLLATE utf8_unicode_ci唯一键;相同错误1170-在键规范中使用的BLOB/TEXT列“post_title”没有键长度相同错误1170-在键规范中使用的BLOB/TEXT列“post_title”没有键长度