2013-10-14 5 views
0

Я пытаюсь создать таблицу в MySQL, но он не хочет играть:MySQL Создание таблицы Error 1064

create table traders(
    traderID INT(9) ZEROFILL NOT NULL AUTO_INCREMENT UNSIGNED, 
    traderProfileName VARCHAR(64) NOT NULL, 
    traderPassword CHAR(128) NOT NULL, 
    traderFirstName VARCHAR(40) NOT NULL, 
    traderSurname VARCHAR(40) NOT NULL, 
    traderContactPhone VARCHAR(14) NOT NULL, 
    locationPostCode CHAR(4) NOT NULL, 
    traderEmail VARCHAR(120) NOT NULL, 
    traderBio VARCHAR(255) DEFAULT NULL, 
    traderReviewRating DECIMAL(5,2) DEFAULT NULL, 
    traderLastLogin DATETIME DEFAULT NULL, 
    PRIMARY_KEY(traderID) 
); 

И я получаю сообщение об ошибке:

"ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNSIGNED, 
traderProfileName VARCHAR(64) NOT NULL, 
traderPassword CHAR(128) NOT ' at line 2" 

Является ли это что-то простое как я использую неправильные параметры для настроек таблицы?

+0

также 'unsigned' не является допустимым типом mysql. Прочтите руководство! У вас есть недопустимый тип и опечатка. –

ответ

0

Auto increment - целое по умолчанию, не нужно определять unsigned.

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

+2

Что делать, если он хочет, чтобы столбец был 'UNSIGNED' целым? –

+0

Если вы не определяете столбец как 'INT UNSIGNED' (т.просто 'INT') наибольшее значение, которое он может сохранить, будет 2147483647; если вы определяете его как «INT UNSIGNED», наибольшее значение, которое он может хранить, будет 4294967295. [См. здесь] (http://dev.mysql.com/doc/refman/5.0/en/integer-types.html) – Barranka

0

попробуйте этот

create table traders 
(
traderID INT(9) ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY, 
traderProfileName VARCHAR(64) NOT NULL, 
traderPassword CHAR(128) NOT NULL, 
traderFirstName VARCHAR(40) NOT NULL, 
traderSurname VARCHAR(40) NOT NULL, 
traderContactPhone VARCHAR(14) NOT NULL, 
locationPostCode CHAR(4) NOT NULL, 
traderEmail VARCHAR(120) NOT NULL, 
traderBio VARCHAR(255) DEFAULT NULL, 
traderReviewRating DECIMAL(5,2) DEFAULT NULL, 
traderLastLogin DATETIME DEFAULT NULL 
); 
  • нет необходимости в беззнаковое

  • использовать первичный ключ в той же строке, как трейдера (ID)

here working demo

+0

Если таблица предназначена для хранения более 2147483647 строк, не следует ли ее объявлять как «INT UNSIGNED»? Я знаю, что это много, но может случиться. – Barranka

-1

У вас есть синтаксические ошибки MySQL. Вот исправление:

CREATE TABLE IF NOT EXISTS `traders` (
`traderID` INT(9) NOT NULL AUTO_INCREMENT, 
`traderProfileName` VARCHAR(64) NOT NULL, 
`traderPassword` CHAR(128) NOT NULL, 
`traderFirstName` VARCHAR(40) NOT NULL, 
`traderSurname` VARCHAR(40) NOT NULL, 
`traderContactPhone` VARCHAR(14) NOT NULL, 
`locationPostCode` CHAR(4) NOT NULL, 
`traderEmail` VARCHAR(120) NOT NULL, 
`traderBio` VARCHAR(255) DEFAULT NULL, 
`traderReviewRating` DECIMAL(5,2) DEFAULT NULL, 
`traderLastLogin` DATETIME DEFAULT NULL, 
PRIMARY KEY (`traderID`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1; 

Я хотел бы добавить предпочтительный двигатель, кодировки, сортировка и автоматическое приращение стартового номер. Если вы хотите сделать это просто заменить последнюю строку с:

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1; 

и изменить по желанию. В противном случае оставить закрывающую скобку.

); 
+0

Объяснение того, что вы изменили, было бы полезно. – showdev

+0

Выполните оба кода, и вы узнаете об этом. – GTodorov

0

При использовании UNSIGNED вы должны положить его рядом с типом данных, то есть: INT UNSIGNED.

исправленный CREATE заявление должно выглядеть следующим образом:

create table traders(
    traderID INT(9) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT PRIMARY KEY, 
--   ^^^^^^^^^^^^^^^ Here is the problem. 
-- Also, you can define this column as a primary key +---^^^^^^^^^^^ 
-- directly in the column definition     | 
    traderProfileName VARCHAR(64) NOT NULL, 
    traderPassword CHAR(128) NOT NULL, 
    traderFirstName VARCHAR(40) NOT NULL, 
    traderSurname VARCHAR(40) NOT NULL, 
    traderContactPhone VARCHAR(14) NOT NULL, 
    locationPostCode CHAR(4) NOT NULL, 
    traderEmail VARCHAR(120) NOT NULL, 
    traderBio VARCHAR(255) DEFAULT NULL, 
    traderReviewRating DECIMAL(5,2) DEFAULT NULL, 
    traderLastLogin DATETIME DEFAULT NULL, 
); 

Вы можете спросить: "Почему?" это потому, что есть два "типа" целое:

  • INT подписал (который может хранить значения от -2147483648 до 2147483647)
  • INT UNSIGNED (который может хранить значения от 0 до 4294967295)

Ссылка:

+0

Еще одна вещь ... 'ZEROFILL' будет только показывать ваши значения с ведущими нулями, это не повлияет на то, как хранятся значения (т.е.' 123' совпадает с '000000123') ... это действительно важно иметь эти ведущие нули? – Barranka