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;
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;
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;
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 typesBLOB
ouTEXT
.
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é. )
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)
);
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