【问题标题】:Creating MySQL a table with a primary text key [duplicate]使用主文本键创建 MySQL 表 [重复]
【发布时间】:2014-03-09 04:07:39
【问题描述】:

我对@9​​87654321@我的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 的主键的正确方法是什么?

【问题讨论】:

  • text 更改为varchar。您不能将文本设置为主键。
  • 您不能使用TEXT 数据类型作为主键。
  • 你的最后一条语句很好,它会创建长度为14的主键。那么错误是什么?
  • order_id TEXT??如果您的 order_id 是字符,请将其设为 VARCHAR 不要为此使用 TEXT。
  • 为什么不使用 VARCHAR 作为 orderR_id 列的数据类型?在 MySQL 中为 TEXT/LOB 数据类型创建索引存在限制,这就是您收到错误的原因

标签: mysql


【解决方案1】:

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

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

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

然后你就可以申请PK了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2023-01-14
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    相关资源
    最近更新 更多