使用主文本键创建MySQL表

时间:2014-02-11 11:34:28

标签: mysql

我用CREATE TABLE的命令是:

CREATE TABLE carts(order_id TEXT(14), items TEXT, shipping INT, price INT

我想将'order_id'设置为我的主键。我已经尝试ALTER TABLE了:

ALTER TABLE `carts` ADD PRIMARY KEY(order_id)

但是这会返回错误:

 #1170 - BLOB/TEXT column 'order_id' used in key specification without a key length

据我所知,这意味着在初始设置中没有正确设置长度,所以我尝试了:

ALTER TABLE `carts` ADD PRIMARY KEY(order_id(14))

返回相同的错误。 phpmyadmin 中定义的类型是'tinytext';我期待看到TEXT(14)

我正在通过PHP中的PDO执行所有这些命令。将“order_id”列设置为TABLE主键的正确方法是什么?

2 个答案:

答案 0 :(得分:5)

MySQL BLOB/TEXT中的

不作为表的一部分提供,而是从其他内存位置引用。因此,它们不能被视为KEY的一部分。

您必须将其定义为VARCHAR(14)。

ALTER TABLE `carts` modify order_id VARCHAR(14);

然后你可以申请PK。

ALTER TABLE `carts` ADD PRIMARY KEY(order_id);

答案 1 :(得分:0)

发生错误是因为MySQL只能索引BLOB或TEXT列的前N个字符。因此,当您尝试作为主键或作为主键或TEXT或BLOB(或属于TEXT或BLOB类型,如TINYBLOB,MEDIUMBLOB,LONGBLOB,TINYTEXT,MEDIUMTEXT和LONGTEXT)的字段/列类型时,错误主要发生。指数。

对于没有长度值的完整BLOB或TEXT,MySQL无法保证列的唯一性,因为它具有可变和动态大小。因此,当使用BLOB或TEXT类型作为索引时,必须提供N的值,以便MySQL可以确定密钥长度。但是,MySQL不支持TEXT或BLOB的密钥长度限制。文本(11)根本不起作用。