0

次の create table (デフォルトの MyISAM に対して) は正しく実行され、テーブルが作成されます。

DROP TABLE IF EXISTS Service; CREATE TABLE Service( idServiceINT, PRIMARY KEY ( idService) );

ただし、mysql 5.1.69 の組み込み innodb で作成すると失敗します。

DROP TABLE IF EXISTS Service; CREATE TABLE Service( idServiceINT, PRIMARY KEY ( idService) ) ENGINE=InnoDB;

Error: Can't create table 'myDatabase.Service' (errno: -1)(1005)

組み込みの innodb はプラグインとは異なるコード ベースですが、5.1.69 の多くは 1.0.3 のプラグインに似ているように見えます。使用されているのは組み込みの innodb でした。

テーブルが同じサーバー上でZerviceという名前の場合、InnoDBに対して正しく機能します。

DROP TABLE IF EXISTS Zervice; CREATE TABLE Zervice( idServiceINT, PRIMARY KEY ( idService) ) ENGINE=InnoDB;

さらに奇妙なことに、テーブルの名前が SERVICE のように大文字である場合、それが作成されます。

DROP TABLE IF EXISTS SERVICE; CREATE TABLE SERVICE( idServiceINT, PRIMARY KEY ( idService) ) ENGINE=InnoDB;

ただし、大文字と小文字が混在する他の名前の他の多くのテーブルを問題なく作成しています。手動と mysql ワークベンチの両方が、innoDB に対するテーブル サービスの作成に失敗しています。

また、5.0 を実行している別のサーバーでは、テーブルを innoDB のサービスとして作成することができ、しばらくの間そのように実行されています (上記のテストでは、実行してテストしたカットダウン テーブルを使用しています)。

Service という単語は mysql のキーワード ページ ( http://dev.mysql.com/doc/refman/5.1/en/reserved-words.html ) にリストされていませんが、問題は innoDB 固有のようで、別のリストはありません。意図したものがある場合は、innoDB キーワードの。テーブル名の前後に左寄りの引用符が使用されていることにも注意してください。

information_schema.TABLES から table_name を選択します。upper(table_name) = 'SERVICE'; 行を返しません。

サービスという言葉が5.1からinnoDBにとって重要である理由、またはこの状況で大文字と小文字が重要である理由(すべてのサーバーはUbuntuです)について、誰かが光を当てることができますか?

4

2 に答える 2