我怎样才能避免得到这个MySQL错误?列名的列说明符不正确?
如何避免出现MySQL错误列主题id的列说明符不正确 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
#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”意味着“可以是负数”。“符号”只是数字前面的减号。我就知道!嗯,我想这可能是问题所在,但是浏览一下我错过的文档,谢谢你在文档中指出这是一个错误。谢谢你,斯沃塞克先生