【问题标题】:SQL Error(1166) : Incorrect column name 'id'SQL 错误 (1166):列名“id”不正确
【发布时间】:2016-02-25 13:23:29
【问题描述】:

我是 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
;

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

【问题讨论】:

    标签: php mysql sql yii heidisql


    【解决方案1】:

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

    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 也有同样的错误。

    【讨论】:

    【解决方案2】:

    这有点奇怪。名称末尾有空格(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 Fiddle。

    我也希望你有这个打算:

    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 这样的数字。

    【讨论】:

    • 第一次查询中UNIQUE 拼写错误
    • @PathikVejani。 . .这没什么区别,因为它是索引的名称,而不是唯一性声明。
    • "数据库、表和列名不能以空格字符结尾。"来源:dev.mysql.com/doc/refman/5.7/en/identifiers.html
    • @Sevie 。 . .谢谢你。我现在将其包含在答案中。
    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多