我用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
主键的正确方法是什么?
答案 0 :(得分:5)
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)根本不起作用。