Mysql 使用主文本键创建表

Mysql 使用主文本键创建表,mysql,Mysql,我用来创建我的表格的命令是: CREATE TABLE carts(order_id TEXT(14), items TEXT, shipping INT, price INT 我想将“order_id”设置为主键。我已尝试用以下方法更改表: ALTER TABLE `carts` ADD PRIMARY KEY(order_id) 但这会返回错误: #1170 - BLOB/TEXT column 'order_id' used in key specification without

我用来创建我的
表格
的命令是:

CREATE TABLE carts(order_id TEXT(14), items TEXT, shipping INT, price INT
我想将“order_id”设置为主键。我已尝试用以下方法
更改

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”;我希望看到
文本(14)


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

发生错误的原因是MySQL只能索引BLOB或文本列的前N个字符。因此,错误主要发生在您试图将文本或BLOB(或属于文本或BLOB类型的文本或BLOB,如TINYBLOB、MEDIUMBLOB、LONGBLOB、TINYTEXT、MEDIUMTEXT和LONGTEXT)的字段/列类型作为主键或索引时


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

在MySQL中,BLOB/TEXT
不作为表的一部分,而是从其他内存位置引用。因此,它们不能被视为
键的一部分

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

然后你可以申请PK

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

text
更改为
varchar
。您不能将文本设置为主键。您不能将
text
数据类型用作主键。您的上一条语句很好,它将创建长度为14的主键。那么错误是什么呢?
order\u id
TEXT??如果您的订单id是字符,请将其设置为
VARCHAR
不要使用文本。为什么不使用VARCHAR作为订单id列的数据类型?在MySQL中为TEXT/LOB数据类型创建索引有一个限制,这就是为什么会出现错误
ALTER TABLE `carts` ADD PRIMARY KEY(order_id);