无法在表名MySQL v5.5.14中创建带下划线的表

时间:2012-04-03 02:19:13

标签: mysql sql mysql-error-1005

我使用的是Mysql v5.5.14,当我尝试执行时:

mysql> CREATE TABLE IF NOT EXISTS LONGBOW_products.universal_partname (
    ->    part_id SMALLINT(5) UNSIGNED NOT NULL DEFAULT 0,
    ->    PRIMARY KEY (part_id)
    -> );

它给我一个错误:

ERROR 1005 (HY000): Can't create table 'LONGBOW_products.universal_partname' (errno: -1)

但是,当我尝试从表名中删除下划线时,它返回true:

mysql> CREATE TABLE IF NOT EXISTS LONGBOW_products.universal (
    ->    part_id SMALLINT(5) UNSIGNED NOT NULL DEFAULT 0,
    ->    PRIMARY KEY (`part_id`)
    -> );
Query OK, 0 rows affected (0.00 sec)

我想知道你是否不能在更新版本的Mysql上使用表名中的下划线?

2 个答案:

答案 0 :(得分:2)

不确定您是否解决了此问题。我用一个非常简单的CREATE语句得到了类似的问题:错误代码:1005。无法创建表'UCQ.country'(错误号:-1)。

根据http://dev.mysql.com/doc/refman/5.5/en/innodb-error-codes.html“如果错误消息引用错误-1,则表创建可能失败,因为该表包含与内部InnoDB表的名称匹配的列名。”

然而,当我查看mysql_error_log.err时,我解决了我的问题: 21107 18:23:19 InnoDB:创建文件'./ucq/country.ibd'时出错。 121107 18:23:19 InnoDB:文件操作中的操作系统错误号17。 InnoDB:错误号17表示“文件存在”。 InnoDB:一些操作系统错误号在下面描述 InnoDB:http://dev.mysql.com/doc/refman/5.5/en/operating-system-error-codes.html InnoDB:虽然相应的表没有,但文件已经存在 InnoDB:存在于InnoDB数据字典中。你搬了InnoDB吗? InnoDB:.ibd文件,不使用SQL命令 InnoDB:DISCARD TABLESPACE和IMPORT TABLESPACE,或者做过 InnoDB:mysqld在CREATE TABLE中间崩溃?您可以 InnoDB:删除文件'./ucq/country.ibd'解决问题 InnoDB:在MySQL的'datadir'下。

所以我刚刚删除了country.ibd,我的CREATE语句运行顺利。

答案 1 :(得分:0)

数据库和表名称不能包含“/”, “\”, “.”,或文件名中不允许的字符。

参考:http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html

删除“。”来自表名