SQL错误(1166):错误的列名称'id'

时间:2016-02-25 13:23:29

标签: php mysql sql yii heidisql

我是yii和heidiSQL的新手,我在创建新表时遇到此错误,请帮我解决此错误

CREATE TABLE `users` (
    `id ` INT(45) NULL,
    `username ` VARCHAR(50) NULL,
    `pwd_hash` VARCHAR(50) NULL,
    `fname` VARCHAR(50) NULL,
    `lname` VARCHAR(50) NULL,
    `email` VARCHAR(50) NULL,
    `country` VARCHAR(50) NULL,
    `address` VARCHAR(50) NULL,
    `gender` VARCHAR(50) NULL,
    INDEX `PRIMARY KEY` (`id `),
    INDEX `UIQUE KEY` (`username `)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
;

我无法在数据库中创建新表。

2 个答案:

答案 0 :(得分:2)

列的定义末尾不允许使用空格,必须是:

CREATE TABLE `users` (
    `id` INT(45) NULL,
    `username` VARCHAR(50) NULL,
    `pwd_hash` VARCHAR(50) NULL,
    `fname` VARCHAR(50) NULL,
    `lname` VARCHAR(50) NULL,
    `email` VARCHAR(50) NULL,
    `country` VARCHAR(50) NULL,
    `address` VARCHAR(50) NULL,
    `gender` VARCHAR(50) NULL,
    INDEX `PRIMARY KEY` (`id`),
    INDEX `UNIQUE KEY` (`username`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB

username有同样的错误。

答案 1 :(得分:1)

这有点奇怪。名称末尾有空格(idusername)。这似乎导致了问题,即使一致地使用了转义名称(这在MySQL documentation中有记录)。这有效:

CREATE TABLE `users` (
    `id` INT(45) NULL,
    `username` VARCHAR(50) NULL,
    `pwd_hash` VARCHAR(50) NULL,
    `fname` VARCHAR(50) NULL,
    `lname` VARCHAR(50) NULL,
    `email` VARCHAR(50) NULL,
    `country` VARCHAR(50) NULL,
    `address` VARCHAR(50) NULL,
    `gender` VARCHAR(50) NULL,
    INDEX `PRIMARY KEY` (`id`),
    INDEX `UIQUE KEY` (`username`)
);

我希望转义的字符能够正常工作。但是,名称末尾的空格是个坏主意,因此请删除它们。 Here是一个SQL小提琴。

我也希望你打算这样做:

CREATE TABLE `users` (
    `id` INT NOT NULL,
    `username` VARCHAR(50) NULL,
    `pwd_hash` VARCHAR(50) NULL,
    `fname` VARCHAR(50) NULL,
    `lname` VARCHAR(50) NULL,
    `email` VARCHAR(50) NULL,
    `country` VARCHAR(50) NULL,
    `address` VARCHAR(50) NULL,
    `gender` VARCHAR(50) NULL,
    PRIMARY KEY (`id`),
    UNIQUE (`username`)
);

您的原始表定义创建了两个名为“PRIMARY KEY”和“UIQUE”的索引。它没有声明主键或唯一约束。

int之后无需像45这样的数字。