1

次の MySQL テーブル定義で、奇妙な名前の依存関係が見られます。示されているようにテーブルをコーディングすると、MySQL が壊れているようです。MySQLQueryBrowser から "select * from dictionary_pair_join" を実行すると、ステータス バーに "No resultset returned" と表示されます。列名もエラーもありません。テーブルに行を挿入すると、ステータス バーに「最後のコマンドの影響を受けた 1 行、結果セットが返されませんでした」と表示され、その後の選択でも同じ「結果セットが返されませんでした」という応答が返されます。

「select」ステートメントでテーブル名をバッククォートで囲むと、すべて正常に機能します。確かに、「dictionary_pair_join」という名前の mysql エンティティはありません!

テーブル定義は次のとおりです。

DROP TABLE IF EXISTS dictionary_pair_join;
CREATE TABLE dictionary_pair_join (
  version_id int(11) UNSIGNED NOT NULL default '0',
  pair_id int(11) UNSIGNED default NULL,
  KEY (version_id),
  KEY (pair_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

壊れた select ステートメントは次のとおりです。

select * from dictionary_pair_join;

これがその作業対応物です:

select * from `dictionary_pair_join`;

selectステートメントでバッククォートが必要なのはなぜですか?

更新: これは Python mysqldb インターフェイスでも失敗するため、調べ始めました。バッククォートを Python の「select」ジェネレーターに入れることはできますが、これが愚かで簡単に変更できるニットであることを望んでいました。違う名前も出てくると思います。

4

1 に答える 1

0

私は Quassnoi と Software Guy からのコメントを更新しました。一緒に、それは mysql/mysqldb/mysqlquerybrowser の単なるバグであると私を説得しました。

テーブル名を ("dictionary_pair_cons" に) 変更すると、クエリ ブラウザと mysqldb の両方で問題がなくなりました。

于 2013-05-16T10:00:25.167 に答える