テーブル作成時のPDOException:ベーステーブルまたはビューが見つかりません[クローズ]


8

MariaDB 5.5.33でDrupalを実行しています。(Drupal 6からDrupal 7.28にアップグレードした後)update.phpを実行すると、エラーが発生します。

失敗:PDOException:SQLSTATE [42S02]:ベーステーブルまたはビューが見つかりません:1146テーブル 'webdb.location_country'が存在しません:CREATE TABLE {location_country}(codeCHAR(2)NOT NULL COMMENT 'Primary Key:Two letter ISO Country Code '、nameVARCHAR(255)NOT NULL DEFAULT' 'COMMENT' Full Country Name '、PRIMARY KEY(code))ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT' country data managed by location.module。 '; 配列()indb_create_table()(/home/web/public_html/includes/database/database.incの行2720)。

コマンドを実行しようとすると

CREATE TABLE {location_country}(codeCHAR(2)NOT NULL COMMENT 'Primary Key:Two letter ISO Country Code'、nameVARCHAR(255)NOT NULL DEFAULT '' COMMENT 'Full Country Name'、PRIMARY KEY(code))ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT 'location.module。によって管理されている国のデータ';

phpMyAdminでエラーが発生する

#1064-SQL構文にエラーがあります。MariaDBサーバーのバージョンに対応するマニュアルで、 '{location_country}(codeCHAR(2)NOT NULL COMMENT' Primary Key:Two letter IS 'at line 1'の近くで使用する正しい構文を確認してください

しかし、どこに問題があるのか​​はわかりませんでした。

回答:


6

同じ問題があり、私の場合、問題はデータベーステーブルエンジンでした。デフォルトでは、それはInnoDBであり、(何らかの理由で、私はまだ理解する必要はありません)Drupalがこのエラーを報告します。

データベースエンジンをMyISAMに変更する必要があります。まず、Drupalによって作成されるテーブルにエンジンとしてMyISAMがあることを確認する必要があります。で/includes/database/mysql/schema.inc、を探し、createTableSql($name, $table)InnoDBをMyISAMに変更します。次に、それを保存します。
あなたは、データベース内のいくつかのテーブルを持っているので、彼らはに変更する必要がありますMyISAM.sqlファイルをテキストエディタで開き、交換するように、単にデータベースをエクスポートし、同様Engine=InnoDBEngine=MyISAM。サーバーでphpmyadminDBのすべてのテーブルを削除し、.sqlそこに新しいファイルをインポートします。このように、すべてのテーブルとDrupalによって作成されるテーブルはMyISAMです。


確かに、問題はエンジンにありました。MyISAMとしてテーブルを作成しました。次に、それをエクスポートし、InnoDBを変更して、インポートを試みました。うまくいきませんでした。そこで、リンク先の説明に従ってMyISAMに切り替えました。動作しているようです。どうもありがとうございました。
ティリア2014年

3

このPDOExceptionに関する質問に対する他の回答(InnoDBエンジンに関係のないものを含む)は重複としてマークされ、これにリダイレクトされるため、これがこの問題に関する回答の標準的な場所だと思います。

モジュールをアンインストールするときにこれに何度か遭遇し、検索したテーブルがサイトに存在しません(のスキーマ定義にタイプミスがあるため.install、またはその他の理由により、誤って削除されたため)。

これを修正する最も簡単な方法は、データベース更新スクリプト(update.php)を手動で実行することです。

サイトが復活したら、問題の根本原因を突き止めて修正する必要があります。


2

生のSQLとして使用する場合は、テーブル名を囲む中括弧を削除する必要があります。

例えば:

CREATE TABLE location_country ( `code` CHAR(2) NOT NULL COMMENT 'Primary Key: Two letter ISO Country Code', `name` VARCHAR(255) NOT NULL DEFAULT '' COMMENT 'Full Country Name ', PRIMARY KEY (`code`) ) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT 'Country data managed by location.module.';

面白い。Drupalが誤ったsysntaxでSQLコマンドを表示するのはなぜですか?とにかく、それはうまくいきませんでした。望ましいものではなく、TEST DBで動作しました。最後に、ソリューションは、以下に説明するようにMyISAMエンジンに切り替えられました。
ティリア2014年

Drupalは中括弧を追加してテーブル名を検出し、クエリを実行する前にデータベースプレフィックスを適用します。
sanzante 2016

1

これは、ラップトップで開発サイトから別の開発サイトにDrupal 7を移動したときと同じエラーメッセージです。Drupalデータベースのテーブルを確認したところ、完全なSQLダンプがインポートされていないことがわかりました(Adminerおよび「サーバーから」オプションのadminer.sqlを使用)。

:アルファベット順のようなSQLダンプの終わり近くに来るのDrupal 7のデータベーステーブルを探し ユーザー*ビュー*Webフォーム*ワークベンチ*xmlsitemap *それは、すべての輸入かどうかを確認します。

drush sql-cli < database.sqlすべてのデータベーステーブルを削除した後、SQLダンプをDrupalデータベースにインポートするために使用しましたdrush sql-drop

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.