PDOException khi tạo bảng: Không tìm thấy bảng cơ sở hoặc chế độ xem [đã đóng]


8

Tôi có Drupal chạy trên MariaDB 5.5.33. Khi tôi chạy update.php (sau khi nâng cấp lên Drupal 7.28 từ Drupal 6), tôi gặp lỗi:

Không thành công: PDOException: SQLSTATE [42S02]: Không tìm thấy bảng cơ sở hoặc chế độ xem: 1146 Bảng 'webdb.location_country' không tồn tại: CREATE TABLE {location_country} ( codeCHAR (2) KHÔNG CÓ khóa chính ', nameVARCHAR (255) NOT NULL DEFAULT '' COMMENT 'Full Tên Nước', PRIMARY KEY ( code)) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT 'Country data quản lý bởi location.module.'; Mảng () indb_create_table () (dòng 2720 của /home/web/public_html/includes/database/database.inc).

Khi tôi cố chạy lệnh

CREATE TABLE {location_country} ( codeCHAR (2) KHÔNG NULL COMMENT 'Khóa chính: Hai chữ cái Mã quốc gia ISO', nameVARCHAR (255) KHÔNG NULL DEFAULT '' COMMENT 'Tên quốc gia đầy đủ', KEY PRIMARY ( code)) Engine = InnoDB DEFAULT SET utf8 COMMENT 'Dữ liệu quốc gia được quản lý bởi location.module.';

trong phpMyAdmin tôi gặp lỗi

# 1064 - Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MariaDB của bạn để biết đúng cú pháp để sử dụng gần '{location_country} ( codeCHAR (2) KHÔNG NULL COMMENT' Khóa chính: Hai chữ cái IS 'ở dòng 1

Nhưng tôi không thể tìm ra vấn đề ở đâu.

Câu trả lời:


6

Tôi có cùng một vấn đề và trong trường hợp của tôi, vấn đề là công cụ bảng cơ sở dữ liệu: Theo mặc định, đó là InnoDB và (vì một số lý do tôi vẫn không phải hiểu) Drupal báo cáo lỗi này.

Bạn phải thay đổi công cụ cơ sở dữ liệu thành MyISAM. Trước hết, bạn phải chắc chắn các bảng sẽ được tạo bởi Drupal có MyISAM làm công cụ: Vào /includes/database/mysql/schema.inc, tìm kiếm createTableSql($name, $table)và thay đổi InnoDB thành MyISAM; Sau đó, lưu nó.
Vì bạn có một vài bảng trong cơ sở dữ liệu của mình, chúng cũng phải được thay đổi MyISAM, vì vậy chỉ cần xuất cơ sở dữ liệu dưới dạng tệp .sql mở nó trong trình soạn thảo văn bản và thay thế Engine=InnoDBbằng Engine=MyISAM. Bây giờ trong máy chủ phpmyadminxóa tất cả các bảng của DB và nhập .sqltệp mới vào đó. Theo cách này, tất cả các bảng của bạn và các bảng sẽ được tạo bởi Drupal là MyISAM.


Thật vậy, vấn đề là ở động cơ. Tôi đã tạo bảng dưới dạng MyISAM. Sau đó tôi đã xuất nó, thay đổi InnoDB và cố gắng nhập trở lại. Nó không hoạt động. Vì vậy, tôi đã chuyển sang MyISAM như được mô tả trên liên kết. Nó dường như được làm việc. Cảm ơn rât nhiều.
Tilia

3

Do các câu trả lời khác (bao gồm cả những câu hỏi không liên quan đến công cụ InnoDB) cho các câu hỏi về PDOException này được đánh dấu là trùng lặp và chuyển hướng đến câu hỏi này, tôi đoán đây là nơi chính xác để trả lời về vấn đề này.

Tôi đã gặp điều này nhiều lần khi gỡ cài đặt một mô-đun và bảng tìm kiếm không tồn tại trên trang web (vì nó đã bị xóa do vô tình, vì có một lỗi đánh máy trong định nghĩa lược đồ .installhoặc vì một số lý do khác).

Cách đơn giản nhất để khắc phục nó là chạy tập lệnh cập nhật cơ sở dữ liệu ( update.php) theo cách thủ công.

Sau khi trang web của bạn được đưa vào hoạt động trở lại, bạn nên cố gắng tìm ra nguyên nhân gốc rễ của vấn đề và khắc phục nó.


2

Bạn sẽ cần phải xóa các dấu ngoặc nhọn quanh tên bảng khi sử dụng làm SQL thô.

ví dụ:

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.';

Hấp dẫn. Tại sao Drupal hiển thị lệnh SQL với sysntax sai? Dù sao, nó đã không làm việc. Nó hoạt động trong TEST DB, không phải trong mong muốn. Cuối cùng, giải pháp đã được chuyển sang công cụ MyISAM như được mô tả dưới đây.
Tilia

Drupal thêm dấu ngoặc nhọn để phát hiện tên bảng và áp dụng tiền tố cơ sở dữ liệu trước khi thực hiện truy vấn.
sanzante

1

Đây là thông báo lỗi tương tự khi chuyển Drupal 7 từ một trang phát triển sang một trang phát triển khác trên máy tính xách tay của tôi. Sau khi kiểm tra các bảng trong cơ sở dữ liệu Drupal, tôi thấy rằng kết xuất sql đầy đủ không được nhập (sử dụng Adminer và tùy chọn "From server", adminer.sql).

Hãy tìm các bảng cơ sở dữ liệu Drupal 7 ở gần cuối kết xuất SQL theo thứ tự bảng chữ cái như: user * , view * , webform * , workbench * , xmlsitemap * để xem liệu tất cả đã được nhập chưa.

Tôi đã từng drush sql-cli < database.sqlnhập kết xuất sql vào cơ sở dữ liệu Drupal sau khi bỏ tất cả các bảng cơ sở dữ liệu với drush sql-drop.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.