以下创建表(针对默认的 MyISAM)正确执行并创建表:
如果存在则删除表Service
;创建表Service
(
idService
INT,主键(idService
));
但是,当在 mysql 5.1.69 的内置 innodb 中创建时,它会失败。
如果存在则删除表Service
;创建表Service
(
idService
INT,主键(idService
))引擎=InnoDB;
Error: Can't create table 'myDatabase.Service' (errno: -1)(1005)
内置 innodb 是与插件不同的代码库,但 5.1.69 的大部分内容似乎与 1.0.3 的插件相似——使用的是内置 innodb。
如果该表在同一台服务器上名为 Zervic,则它可以针对 InnoDB 正常工作。
如果存在则删除表Zervice
;创建表Zervice
(
idService
INT,主键(idService
))引擎=InnoDB;
更奇怪的是,如果该表以大写形式命名为 SERVICE,它就会被创建。
如果存在则删除表SERVICE
;创建表SERVICE
(
idService
INT,主键(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)?