0

我将如何在 phpMyAdmin中执行以下操作(仅对如何执行 UNIQUE (title, description) 感兴趣)?:

CREATE TABLE `myData` (
    id serial primary key,
    title varchar(255) not null,
    description varchar(255) not null,
    UNIQUE (title, description)
);

顺便说一句,为了不对 SO 提出另一个问题,我想知道我可以将哪些其他类型用于长字符串?因为 225 个字符对于我们的目的来说太小了。虽然我知道 varchar 从 MySQL 5.0.3 开始最多可以接受 65,535 个字符。但是我可以将这些字段指定为 MEDIUMTEXT(为了兼容性,我的客户希望这些字段如此)?当我这样做时,我收到一个错误,因为“ BLOB/TEXT 列 ... 在没有密钥长度的密钥规范中使用”。那我该怎么办?我需要这两个字段是唯一的 - 这样即使描述不同,我也可以存储相似的标题,但是当标题和描述与传入数据的标题和描述相匹配时,我不希望存储这些传入数据.

4

4 回答 4

1

默认的最大密钥长度是1000字节MyISAM3072字节InnoDB(另外要求密钥中的每一列不应超过767字节)。

如果您的表是InnoDBMyISAM使用单字节编码,那么您可以创建约束。

如果不是,那么您可以创建一个前缀索引,但请注意该索引只会在前缀内保持唯一性。

但是,将标题和描述散列并将散列存储在唯一列中会更好。

于 2010-03-04T13:05:10.713 回答
0

要使用 PhpMyAdmin 创建 UNIQUE(我希望这是您的问题;))请执行以下操作:

导航到表并选择“结构”,然后添加超过 2 行的索引(左下角),选择两个字段和“indextyp:唯一”,您就完成了。

编辑:添加了截图,它是德语,但对你来说应该是一样的。我真的希望这能解决问题,如果不是,我根本不理解你的问题和你所做的所有评论。

http://dl.dropbox.com/u/3615626/stackoverflow/phpmyadmin-step1.png

http://dl.dropbox.com/u/3615626/stackoverflow/phpmyadmin-step2.png

它在“索引”下归档,因为“唯一”只是一种特殊类型的索引。

于 2010-03-04T13:07:06.467 回答
0
CREATE TABLE `myData` (
`id` INT( 12 ) NOT NULL ,
`title` TEXT NOT NULL ,
`description` TEXT NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`title` (255) ,
`description` (255)
)
);

MySQL 将存储来自标题和描述的完整信息,但它只会索引这些字段中的 255 个第一个字符。这意味着您键入 255 个相同字符的 2 个标题,然后输入不同的内容 - 它会给您一个加倍的错误。

于 2010-03-04T13:17:48.877 回答
0

如果您已经创建了表,请转到 PhpMyAdmin 中的结构,选择左侧复选框的两列(标题、描述)。然后单击表格描述下方控件行中的U图标。这将在两个选定字段上添加唯一索引。

Quassnoi 关于索引长度和使用哈希替代的评论很到位。另请注意,UTF-8 文本列在索引中每个字符需要三个字节,因此索引 UTF-8 文本列非常昂贵。

于 2010-03-04T14:28:35.710 回答