gpt4 book ai didi

mysql - 如何使mysql字段唯一?

转载 作者:行者123 更新时间:2023-11-29 04:53:04 25 4
gpt4 key购买 nike

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

字段:post_title
类型:文本
整理:utf8_unicode_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 ;

最佳答案

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

因此解决方案是删除 TEXT 并设置为长度为 255 的 VARCHAR 数据类型。(默认长度)。

`post_title` varchar(255) COLLATE utf8_unicode_ci UNIQUE KEY

关于mysql - 如何使mysql字段唯一?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9527583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com