Как я могу избежать получения этой ошибки MySQL Неправильный спецификатор столбца для столбца COLUMN NAME?

Как я могу избежать получения этой ошибки MySQL Неверный спецификатор столбца для столбца topic_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;

Ответы

Ответ 1

Чтобы использовать AUTO_INCREMENT, вам нужно использовать deifne column как 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;

Ответ 2

Свойство 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;

Ответ 3

Цитирование doc:

Некоторые атрибуты не относятся ко всем типам данных. AUTO_INCREMENT применяется только для целых чисел и типов с плавающей точкой. DEFAULT не применяется к типы BLOB или TEXT.

В вашем случае вы пытаетесь применить модификатор AUTO_INCREMENT к столбцу char. Чтобы решить эту проблему, либо полностью отбросьте AUTO_INCREMENT (это означает, что вам нужно будет создать уникальный идентификатор на уровне приложения), либо просто измените тип topic_id на соответствующий целочисленный.

В качестве побочного элемента мало смысла использовать char(36) для хранения счетчиков сообщений, поэтому, вероятно, необходимо изменить тип столбца. Похоже, вы идете таким образом, чтобы предотвратить переполнение целых чисел, но если вы имеете дело с более чем 18446744073709551615 сообщениями (наибольшее число, которое может быть сохранено в столбце BIGINT UNSIGNED) в одной теме, у вас гораздо больше проблема на вашей стороне, вероятно. )

Ответ 4

Вы не можете автоматически увеличивать значения 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;

Надеюсь, что это поможет

Ответ 5

У меня была та же проблема, но с использованием типа Long. Я изменился для INT, и это сработало для меня.

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

Ответ 6

Я также сталкиваюсь с такой же проблемой, после нескольких исследований я удаляю свой столбец id и снова делаю это с использованием типа INT. Теперь проблема решена.