【发布时间】:2013-08-09 15:59:09
【问题描述】:
以下创建表(针对默认的 MyISAM)正确执行并创建表:
如果存在则删除表Service;
创建表Service (
idServiceINT,
主键 (idService)
);
但是,当在 mysql 5.1.69 的内置 innodb 中创建时,它会失败。
如果存在则删除表Service;
创建表Service (
idServiceINT,
主键 (idService)
) 引擎=InnoDB;
Error: Can't create table 'myDatabase.Service' (errno: -1)(1005)
内置 innodb 是与插件不同的代码库,但 5.1.69 的大部分内容似乎与 1.0.3 的插件相似——它是使用的内置 innodb。
如果该表在同一台服务器上名为 Zervice,则它可以正常工作于 InnoDB。
如果存在则删除表Zervice;
创建表Zervice (
idServiceINT,
主键 (idService)
) 引擎=InnoDB;
更奇怪的是,如果表以大写形式命名为 SERVICE,那么它就会被创建。
如果存在则删除表 SERVICE;
创建表SERVICE (
idServiceINT,
主键 (idService)
) 引擎=InnoDB;
但是,我正在创建许多其他名称混合大小写的其他表,没有任何问题。我手动和 mysql 工作台都无法针对 innoDB 创建表服务。
同样在另一台运行 5.0 的服务器上,该表可以在 innoDB 中创建为服务,并且已经运行了一段时间(在上面的测试中,我使用的是我已经执行和测试过的缩减表)。
mysql 的关键字页面 (http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html) 上没有列出 Service 这个词,但是问题似乎是特定于 innoDB 的,并且如果有任何意图,也没有单独的 innoDB 关键字列表。另请注意,表名周围使用了左斜引号。
从 information_schema.TABLES 中选择表名,其中上(表名)='服务'; 不返回任何行。
任何人都可以解释为什么服务这个词可能对 5.1 的 innoDB 很重要,或者为什么在这种情况下大小写很重要(所有服务器都是 Ubuntu)?
【问题讨论】: