PDOException saat membuat tabel: Tabel atau tampilan basis tidak ditemukan [ditutup]

8

Saya menjalankan Drupal di MariaDB 5.5.33. Ketika saya menjalankan update.php (setelah memutakhirkan ke Drupal 7.28 dari Drupal 6) saya mendapatkan kesalahan:

Gagal: PDOException: SQLSTATE [42S02]: Tabel dasar atau tampilan tidak ditemukan: 1146 Tabel 'webdb.location_country' tidak ada: CREATE TABLE {location_country} ( codeCHAR (2) NOT NULL KOMENTAR 'Kunci Utama: Dua huruf ISO Kode Negara: Dua huruf ISO Kode Negara ', nameVARCHAR (255) BUKAN NULL DEFAULT' 'KOMENTAR' Nama Negara Lengkap ', KUNCI UTAMA ( code)) ENGINE = InnoDB KARAKTER DEFAULT SET utf8 KOMENTAR' Data negara dikelola oleh location.module. '; Array () indb_create_table () (baris 2720 dari /home/web/public_html/includes/database/database.inc).

Ketika saya mencoba menjalankan perintah

CREATE TABLE {location_country} ( codeCHAR (2) BUKAN KOMENTAR 'Kunci Utama: Dua huruf ISO Kode Negara', nameVARCHAR (255) BUKAN NULL DEFAULT '' KOMENTAR 'Nama Negara Lengkap', KUNCI UTAMA ( code)) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 KOMENTAR 'Data negara dikelola oleh location.module.';

di phpMyAdmin saya mendapatkan kesalahan

# 1064 - Anda memiliki kesalahan dalam sintaks SQL Anda; periksa manual yang sesuai dengan versi server MariaDB Anda untuk sintaks yang tepat untuk digunakan di dekat '{location_country} ( codeCHAR (2) BUKAN KOMENTAR' Kunci Utama: Dua huruf IS 'di baris 1

Tapi saya tidak bisa mencari tahu di mana masalahnya.

Tilia
sumber

Jawaban:

6

Saya memiliki masalah yang sama, dan dalam kasus saya masalahnya adalah mesin tabel database: Secara default itu adalah InnoDB dan (untuk beberapa alasan saya masih tidak harus mengerti) Drupal melaporkan kesalahan ini.

Anda harus mengubah mesin database ke MyISAM. Pertama, Anda harus yakin tabel yang akan dibuat oleh Drupal memiliki MyISAM sebagai engine: In /includes/database/mysql/schema.inc, lookup createTableSql($name, $table), dan ubah InnoDB ke MyISAM; lalu, simpan.
Karena Anda memiliki beberapa tabel dalam database Anda, mereka juga harus diubah MyISAM, jadi cukup ekspor database sebagai file .sql membukanya dalam editor teks dan ganti Engine=InnoDBdengan Engine=MyISAM. Sekarang di server phpmyadminhapus semua tabel DB dan impor .sqlfile baru di sana. Dengan cara ini, semua tabel Anda dan tabel yang akan dibuat oleh Drupal adalah MyISAM.

M ama D
sumber
Memang, masalahnya ada di mesin. Saya membuat tabel sebagai MyISAM. Saya kemudian mengekspornya, mengubah do InnoDB dan mencoba mengimpor kembali. Itu tidak berhasil. Jadi saya beralih ke MyISAM seperti yang dijelaskan pada tautan. Tampaknya berhasil. Terima kasih banyak.
Tilia
3

Karena orang lain menjawab (termasuk yang sama sekali tidak terkait dengan mesin InnoDB) untuk pertanyaan tentang PDOException ini ditandai sebagai duplikat dan pengalihan untuk yang ini, saya kira ini adalah tempat kanonik untuk jawaban tentang masalah ini.

Saya telah menemukan ini beberapa kali ketika menghapus modul, dan tabel mencari tidak ada di situs (karena telah dihapus secara tidak sengaja, karena ada kesalahan ketik dalam definisi skema di .install, atau karena alasan lain).

Cara paling sederhana untuk memperbaikinya adalah dengan menjalankan skrip pembaruan basis data ( update.php) secara manual.

Setelah situs Anda dihidupkan kembali, Anda harus mencoba mencari tahu akar penyebab masalahnya dan memperbaikinya.

Radikal bebas
sumber
2

Anda harus menghapus kurung kurawal di sekitar nama tabel saat menggunakan sebagai SQL mentah.

misalnya:

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.';
David Thomas
sumber
Menarik. Mengapa Drupal menunjukkan perintah SQL dengan sysntax yang salah? Bagaimanapun, itu tidak berhasil. Ini bekerja di TEST DB, bukan yang diinginkan. Akhirnya, solusinya beralih ke mesin MyISAM seperti yang dijelaskan di bawah ini.
Tilia
Drupal menambahkan tanda kurung keriting untuk mendeteksi nama tabel dan menerapkan awalan basis data sebelum menjalankan kueri.
sanzante
1

Ini adalah pesan kesalahan yang sama ketika menjalankan Drupal 7 dari satu situs pengembangan ke situs pengembangan lain di laptop saya. Setelah memeriksa tabel dalam database Drupal saya menemukan bahwa dump sql lengkap tidak diimpor (menggunakan Admin dan opsi "Dari server", adminer.sql).

Cari tabel database Drupal 7 yang mendekati akhir dump SQL secara alfabet seperti: pengguna * , tampilan * , formulir web * , meja kerja * , xmlsitemap * untuk melihat apakah semuanya diimpor.

Saya biasa drush sql-cli < database.sqlmengimpor dump sql ke dalam database Drupal setelah menjatuhkan semua tabel database drush sql-drop.

frederickjh
sumber