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
295k52 gold badges303 silver badges346 bronze badges
asked Oct 1, 2014 at 5:52
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
731k53 gold badges488 silver badges607 bronze badges
answered Oct 1, 2014 at 5:57
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
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
theBLOB
orTEXT
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
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
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 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'
Solution
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.
-
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.
Раньше база стояла на другом хостинге, все прекрастно работало, сменил хост и из трех баз одна не хочет устанавливаться. -
Resident
Сообщение об ошибке не очень информативное…
Попробуй изменить varchar(512) на varchar(255). По-моему, VARCHAR не может быть длиннее 255 символов. -
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 и всеровно тоже самое, по всей видимости проблема не в этом. на старом хостинге ведьработало все -
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;