我怎样才能避免得到这个MySQL错误?列名的列说明符不正确?

我怎样才能避免得到这个MySQL错误?列名的列说明符不正确?,mysql,sql,auto-increment,ddl,Mysql,Sql,Auto Increment,Ddl,如何避免出现MySQL错误列主题id的列说明符不正确 MySQL错误 #1063 - Incorrect column specifier for column 'topic_id' SQL架构 CREATE TABLE discussion_topics ( topic_id char(36) NOT NULL AUTO_INCREMENT, project_id char(36) NOT NULL, topic_subject VARCHAR(255) NOT NU

如何避免出现MySQL错误列主题id的列说明符不正确

MySQL错误

#1063 - Incorrect column specifier for column 'topic_id'
SQL架构

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;
引述:

某些属性并不适用于所有数据类型<代码>自动增量适用 仅适用于整数和浮点类型<代码>默认值不适用于
BLOB
TEXT
类型

在您的例子中,您试图将
自动增量
修饰符应用于
字符
列。要解决这个问题,可以完全删除
AUTO_INCREMENT
(这意味着您必须在应用程序级别生成一个唯一的id),或者只需将
topic_id
类型更改为相关的整数


作为旁注,使用
char(36)
来存储posts计数没有什么意义,因此可能还需要更改列的类型。看起来您这样做是为了防止整数溢出-但是如果您在单个主题中处理的帖子超过
18446744073709551615
posts(可以存储在
BIGINT UNSIGNED
列中的最大数量),您可能会遇到更大的问题。)

自动增量属性仅适用于数字列(整数和浮点),而不适用于字符列:

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;

要使用
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;

不能自动递增
char
值。它应该是
int
long
(整数或浮点)。 试试这个

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;

希望这有帮助

我也遇到了同样的问题,但使用的是长字体。我换了INT,这对我很有用

CREATE TABLE lists (
 id INT NOT NULL AUTO_INCREMENT,
 desc varchar(30),
 owner varchar(20),
 visibility boolean,
 PRIMARY KEY (id)
 );

也许我是在偷懒,但是有没有一个简单的1-2句的方法来定义虚拟术语中的差异,比如
无符号
有符号
我不知道这意味着什么,不幸的是,我现在没有时间阅读一个小时?好吧,当你定义经典INT时,它是有符号的,值从-2147483648到2147483647,但是自动插入的值只能是加号的,所以当您使用unsigned时,mysql需要0到4294967295之间的数字,在相同的情况下,INT是4kb,在相同的4kb中,您可以使用两倍多的条目:)希望您理解“signed”意味着“可以是负数”。“符号”只是数字前面的减号。我就知道!嗯,我想这可能是问题所在,但是浏览一下我错过的文档,谢谢你在文档中指出这是一个错误。谢谢你,斯沃塞克先生