web-dev-qa-db-fra.com

Comment éviter cette erreur MySQL Spécificateur de colonne incorrect pour la colonne COLUMN NAME?

Comment éviter cette erreur MySQL Spécificateur de colonne incorrect pour la colonne topic_id?

Erreur MySQL ...

#1063 - Incorrect column specifier for column 'topic_id'

Schéma 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;
28
JasonDavis

Utiliser AUTO_INCREMENT vous devez définir la colonne comme INT ou comme types à virgule flottante, et non comme CHAR.

AUTO_INCREMENT n'utilise que la valeur non signée, il est donc bon d'utiliser 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;
39
M.Svrcek

Le auto_increment La propriété ne fonctionne que pour les colonnes numériques (entier et virgule flottante), pas pour char colonnes:

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;
5
Mureinik

Citant le doc :

Certains attributs ne s'appliquent pas à tous les types de données. AUTO_INCREMENT S'applique uniquement aux types entiers et à virgule flottante. DEFAULT ne s'applique pas aux types BLOB ou TEXT.

Dans votre cas, vous essayez d'appliquer le modificateur AUTO_INCREMENT À la colonne char. Pour résoudre ce problème, supprimez AUTO_INCREMENT Complètement (cela signifie que vous devrez générer un identifiant unique au niveau de l'application) ou changez simplement le type topic_id Par le type entier correspondant.

Sidenote, utiliser char(36) pour stocker les posts count n'a donc aucun sens, de sorte que le type de la colonne doit probablement également être modifié. Il semblerait que vous évitiez les dépassements d’entiers de cette façon, mais si vous avez plus de 18446744073709551615 Messages (le plus grand nombre pouvant être stocké dans la colonne BIGINT UNSIGNED) Dans une seule sujet, vous avez probablement beaucoup plus gros problème de votre côté. )

3
raina77ow

J'avais le même problème, mais en utilisant le type Long. J'ai changé pour INT et cela a fonctionné pour moi.

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

Vous ne pouvez pas incrémenter automatiquement les valeurs char. Ce devrait être int ou long (entiers ou points flottants). Essayez avec ça,

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;

J'espère que cela t'aides

2
codebot