Ошибка 1063 mysql

How can I avoid getting this MySQL error Incorrect column specifier for column topic_id ?

MySQL Error…

#1063 - Incorrect column specifier for column 'topic_id'

SQL Schema…

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;

Mureinik's user avatar

Mureinik

295k52 gold badges303 silver badges346 bronze badges

asked Oct 1, 2014 at 5:52

JasonDavis's user avatar

JasonDavisJasonDavis

48k99 gold badges316 silver badges534 bronze badges

0

To use AUTO_INCREMENT you need to deifne column as INT or floating-point types, not CHAR.

AUTO_INCREMENT use only unsigned value, so it’s good to use UNSIGNED as well;

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;

Barmar's user avatar

Barmar

731k53 gold badges488 silver badges607 bronze badges

answered Oct 1, 2014 at 5:57

M.Svrcek's user avatar

3

The auto_increment property only works for numeric columns (integer and floating point), not char columns:

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;

answered Oct 1, 2014 at 5:57

Mureinik's user avatar

MureinikMureinik

295k52 gold badges303 silver badges346 bronze badges

Quoting the doc:

Some attributes do not apply to all data types. AUTO_INCREMENT applies
only to integer and floating-point types. DEFAULT does not apply to
the BLOB or TEXT types.

In your case, you’re trying to apply AUTO_INCREMENT modifier to char column. To solve this, either drop AUTO_INCREMENT altogether (that means you’ll have to generate a unique id on the application level) or just change topic_id type to the relevant integer one.

As a sidenote, it makes little sense using char(36) to store the posts count, so that column’s type probably has to be changed as well. It looks like you’re going this way to prevent integer overflow — but if you’re dealing with more than 18446744073709551615 posts (the biggest number that can be stored in BIGINT UNSIGNED column) in a single topic, you have far bigger problem on your side probably. )

answered Oct 1, 2014 at 5:57

raina77ow's user avatar

raina77owraina77ow

103k14 gold badges192 silver badges229 bronze badges

1

You cannot auto increment the char values. It should be int or long(integers or floating points).
Try with this,

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;

Hope this helps

answered Oct 1, 2014 at 6:05

codebot's user avatar

codebotcodebot

2,5302 gold badges36 silver badges87 bronze badges

1

I was having the same problem, but using Long type. I changed for INT and it worked for me.

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

answered Jul 28, 2016 at 9:22

J C's user avatar

J CJ C

7317 silver badges11 bronze badges

[Solved] #1063 – Incorrect column specifier for column . . .

While adding auto increment value to one of the columns in my mysql database table, I got the error saying:

Error

SQL query:

ALTER TABLE `tablename`  ADD `id` VARCHAR(11) NOT NULL AUTO_INCREMENT  AFTER `userid`,  ADD   PRIMARY KEY  (`id`) ;

MySQL said: 

#1063 - Incorrect column specifier for column 'id' 

php-mysqlSolution

The error can easily be solved by changing the “type” of the column to INT (instead of VARCHAR which you’ve probably done).

Hopefully this solves your mysql error :) Happy coding!

You might also like

  • Forward POST variables to another php page using curl (1)
  • How to use .htaccess on IIS (mod_rewrite for microsoft iis server) (1)
  • Detect users internet browser (firefox, safari, iphone, ipod, ipad, internet explorer, opera ) and redirect to different page specific to it (1)

Вопрос:

Как я могу избежать получения этой ошибки 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;

Лучший ответ:

Чтобы использовать 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;

Ответ №1

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

Ответ №2

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

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

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

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

Ответ №3

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

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

Ответ №4

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

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

Ответ №5

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

За последние 24 часа нас посетили 11042 программиста и 885 роботов. Сейчас ищут 619 программистов …

Проблема-Некорректный определитель столбца для столбца ‘%s’

Тема в разделе «MySQL», создана пользователем Resident, 23 май 2007.


  1. Resident

    Resident
    Активный пользователь

    С нами с:
    23 май 2007
    Сообщения:
    3
    Симпатии:
    0

    Рад всех приветствовать!
    Помогите разобраться, не могу установить базу, постоянно выдает такое сообщение:

    — Структура таблицы `COLUMN_PRIVILEGES`

    CREATE TEMPORARY TABLE `COLUMN_PRIVILEGES` (

    `GRANTEE` varchar( 81 ) NOT NULL default »,
    `TABLE_CATALOG` varchar( 512 ) default NULL ,
    `TABLE_SCHEMA` varchar( 64 ) NOT NULL default »,
    `TABLE_NAME` varchar( 64 ) NOT NULL default »,
    `COLUMN_NAME` varchar( 64 ) NOT NULL default »,
    `PRIVILEGE_TYPE` varchar( 64 ) NOT NULL default »,
    `IS_GRANTABLE` varchar( 3 ) NOT NULL default »
    ) ENGINE = MEMORY DEFAULT CHARSET = utf8;

    Ответ MySQL:
    Error: 1063 SQLSTATE: 42000 (ER_WRONG_FIELD_SPEC)
    Message: Некорректный определитель столбца для столбца ‘%s’
    ——————-

    Пытался «default «убрать, бесполезно. Как можно исправить ошибку, может кто знает?
    P.S.
    Раньше база стояла на другом хостинге, все прекрастно работало, сменил хост и из трех баз одна не хочет устанавливаться.

  2. Resident
    Сообщение об ошибке не очень информативное…
    Попробуй изменить varchar(512) на varchar(255). По-моему, VARCHAR не может быть длиннее 255 символов.


  3. Resident

    Resident
    Активный пользователь

    С нами с:
    23 май 2007
    Сообщения:
    3
    Симпатии:
    0

    Изменил на 255 , теперь другая проблема


    — Дамп данных таблицы `COLUMN_PRIVILEGES`

    — ———————————————————

    — Структура таблицы `KEY_COLUMN_USAGE`

    CREATE TEMPORARY TABLE `KEY_COLUMN_USAGE` (

    `CONSTRAINT_CATALOG` varchar( 512 ) default NULL ,
    `CONSTRAINT_SCHEMA` varchar( 64 ) NOT NULL default »,
    `CONSTRAINT_NAME` varchar( 64 ) NOT NULL default »,
    `TABLE_CATALOG` varchar( 512 ) default NULL ,
    `TABLE_SCHEMA` varchar( 64 ) NOT NULL default »,
    `TABLE_NAME` varchar( 64 ) NOT NULL default »,
    `COLUMN_NAME` varchar( 64 ) NOT NULL default »,
    `ORDINAL_POSITION` bigint( 10 ) NOT NULL default ‘0’,
    `POSITION_IN_UNIQUE_CONSTRAINT` bigint( 10 ) default NULL ,
    `REFERENCED_TABLE_SCHEMA` varchar( 64 ) default NULL ,
    `REFERENCED_TABLE_NAME` varchar( 64 ) default NULL ,
    `REFERENCED_COLUMN_NAME` varchar( 64 ) default NULL
    ) ENGINE = MEMORY DEFAULT CHARSET = utf8;

    Ответ MySQL:

    #1163 — The used table type doesn’t support BLOB/TEXT columns

    ————
    Там тоже изменил на 255 и всеровно тоже самое, по всей видимости проблема не в этом. на старом хостинге ведьработало все


  4. Resident

    Resident
    Активный пользователь

    С нами с:
    23 май 2007
    Сообщения:
    3
    Симпатии:
    0

    Не, на самом деле ты был прав, я все что там было в базе со значением 512 изменил 255 и все прекрастно импортировал. Спасибо.

How can I avoid getting this MySQL error Incorrect column specifier for column topic_id ?

MySQL Error…

#1063 - Incorrect column specifier for column 'topic_id'

SQL Schema…

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;

This question is related to
mysql
sql
auto-increment
ddl

To use AUTO_INCREMENT you need to deifne column as INT or floating-point types, not CHAR.

AUTO_INCREMENT use only unsigned value, so it’s good to use UNSIGNED as well;

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;

Понравилась статья? Поделить с друзьями:
  • Ошибка 1063 amd
  • Ошибка 10621 sinumerik 840d
  • Ошибка 1062 служба не запущена windows 10
  • Ошибка 1062 при подключении к интернету как исправить
  • Ошибка 1062 при подключении к интернету windows 8