2013-10-14 61 views
0

我想在MySQL中創建一個表,但它並不想打:的MySQL創建表出錯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

默認情況下,自動增量是一個整數,不需要定義無符號數。

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

If該表是爲了容納超過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