如何避免获取此列错误列错误列名称列错误?

时间:2014-10-01 05:52:28

标签: mysql sql auto-increment ddl

如何避免收到此MySQL错误列topic_id 的列说明不正确?

MySQL错误......

#1063 - Incorrect column specifier for column 'topic_id'

SQL Schema ...

CREATE TABLE discussion_topics (
    topic_id char(36) NOT NULL AUTO_INCREMENT,
    project_id char(36) NOT NULL,
    topic_subject VARCHAR(255) NOT NULL,
    topic_content TEXT default NULL,
    date_created DATETIME NOT NULL,
    date_last_post DATETIME NOT NULL,
    created_by_user_id char(36) NOT NULL,
    last_post_user_id char(36) NOT NULL,
    posts_count char(36) default NULL,
    PRIMARY KEY (topic_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

5 个答案:

答案 0 :(得分:33)

要使用AUTO_INCREMENT,您需要将列定义为INT或浮点类型,而不是CHAR

AUTO_INCREMENT仅使用无符号值,因此使用UNSIGNED也不错;

CREATE TABLE discussion_topics (

     topic_id INT NOT NULL unsigned AUTO_INCREMENT,
     project_id char(36) NOT NULL,
     topic_subject VARCHAR(255) NOT NULL,
     topic_content TEXT default NULL,
     date_created DATETIME NOT NULL,
     date_last_post DATETIME NOT NULL,
     created_by_user_id char(36) NOT NULL,
     last_post_user_id char(36) NOT NULL,
     posts_count char(36) default NULL,
     PRIMARY KEY (topic_id) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

答案 1 :(得分:5)

auto_increment属性仅适用于数字列(整数和浮点),而不适用于char列:

CREATE TABLE discussion_topics (
    topic_id INT NOT NULL AUTO_INCREMENT,
    project_id char(36) NOT NULL,
    topic_subject VARCHAR(255) NOT NULL,
    topic_content TEXT default NULL,
    date_created DATETIME NOT NULL,
    date_last_post DATETIME NOT NULL,
    created_by_user_id char(36) NOT NULL,
    last_post_user_id char(36) NOT NULL,
    posts_count char(36) default NULL,
    PRIMARY KEY (topic_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

答案 2 :(得分:3)

引用doc

  

某些属性不适用于所有数据类型。 AUTO_INCREMENT适用   仅限整数和浮点类型。 DEFAULT不适用于此   BLOBTEXT类型。

在您的情况下,您尝试将AUTO_INCREMENT修饰符应用于char列。要解决此问题,请完全删除AUTO_INCREMENT(这意味着您必须在应用程序级别生成唯一ID)或者只需将topic_id类型更改为相关的整数。

作为旁注,使用char(36)存储帖子 count 是没有意义的,因此列的类型可能也必须更改。看起来你是这样做的,以防止整数溢出 - 但如果你正在处理超过18446744073709551615个帖子(可以存储在BIGINT UNSIGNED列中的最大数量)一个主题,你可能有更大的问题。 )

答案 3 :(得分:3)

我遇到了同样的问题,但使用的是Long类型。我改为INT,它对我有用。

(Action)Delegate.CreateDelegate(typeof(Action), mb, mi)

答案 4 :(得分:2)

您无法自动增加char值。它应该是intlong(整数或浮点数)。 试试这个,

CREATE TABLE discussion_topics (
    topic_id int(5) NOT NULL AUTO_INCREMENT,
    project_id char(36) NOT NULL,
    topic_subject VARCHAR(255) NOT NULL,
    topic_content TEXT default NULL,
    date_created DATETIME NOT NULL,
    date_last_post DATETIME NOT NULL,
    created_by_user_id char(36) NOT NULL,
    last_post_user_id char(36) NOT NULL,
    posts_count char(36) default NULL,
    PRIMARY KEY (`topic_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

希望这有帮助