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

Jas*_*vis 30 mysql sql ddl auto-increment

如何避免获取此MySQL错误列topic_id的列说明符不正确

MySQL错误......

#1063 - Incorrect column specifier for column 'topic_id'
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

M.S*_*cek 40

要使用,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;
Run Code Online (Sandbox Code Playgroud)

  • 好吧,当你定义经典INT时,它是有符号的,值从-2147483648到2147483647,但是自动引用的值只能加号,所以当你使用unsigned时,mysql期望0到4294967295之间的数字,同样的子,INT是4kb并且在相同的4kb,你可以使用两倍以上的条目:)希望你明白 (2认同)

Mur*_*nik 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;
Run Code Online (Sandbox Code Playgroud)