PDOException при создании таблицы: базовая таблица или представление не найдено [закрыто]

8

У меня Drupal работает на MariaDB 5.5.33. Когда я запускаю update.php (после обновления до Drupal 7.28 из Drupal 6) я получаю сообщение об ошибке:

Ошибка: PDOException: SQLSTATE [42S02]: Базовая таблица или представление не найдены: 1146 Таблица 'webdb.location_country' не существует: CREATE TABLE {location_country} ( codeCHAR (2) NOT NULL COMMENT 'Первичный ключ: двухбуквенный код страны ISO ', nameVARCHAR (255) NOT NULL DEFAULT' 'КОММЕНТАРИЙ' Полное имя страны ', ПЕРВИЧНЫЙ КЛЮЧ ( code)) ENGINE = InnoDB SET CHARACTER SET CHEFACTER utf8 COMMENT' Данные страны, управляемые location.module. '; Array () indb_create_table () (строка 2720 из /home/web/public_html/includes/database/database.inc).

Когда я пытаюсь запустить команду

CREATE TABLE {location_country} ( codeCHAR (2) NOT NULL COMMENT 'Первичный ключ: двухбуквенный код страны ISO', nameVARCHAR (255) NOT NULL DEFAULT '' COMMENT 'Полное имя страны', PRIMARY KEY ( code)) ENGINE = InnoDB DEFAULT CHARACTER SET utf8 COMMENT 'Данные страны, управляемые location.module.';

в phpMyAdmin я получаю ошибку

# 1064 - у вас ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MariaDB, чтобы узнать правильный синтаксис для использования рядом с '{location_country} ( codeCHAR (2) NOT NULL COMMENT' Первичный ключ: две буквы IS 'в строке 1

Но я не смог выяснить, в чем проблема.

Tilia
источник

Ответы:

6

У меня была та же самая проблема, и в моем случае проблема заключалась в механизме таблиц базы данных: по умолчанию это InnoDB и (по некоторым причинам я до сих пор не понимаю) Drupal сообщает об этой ошибке.

Вы должны изменить ядро ​​базы данных на MyISAM. Прежде всего, вы должны быть уверены, что таблицы, которые будут созданы Drupal, имеют MyISAM в качестве движка: In /includes/database/mysql/schema.inc, найдите createTableSql($name, $table)и измените InnoDB на MyISAM; затем сохраните его.
Поскольку в вашей базе данных есть несколько таблиц, их также необходимо изменить MyISAM, поэтому просто экспортируйте базу данных в виде файла .sql, откройте ее в текстовом редакторе и замените Engine=InnoDBна Engine=MyISAM. Теперь на сервере phpmyadminудалите все таблицы БД и импортируйте .sqlтуда новый файл. Таким образом, все ваши таблицы и таблицы, которые будут созданы Drupal, являются MyISAM.

М ама Д
источник
Действительно, проблема была в двигателе. Я создал таблицу как MyISAM. Затем я экспортировал его, изменил сделать InnoDB и попытался импортировать обратно. Это не сработало. Поэтому я перешел на MyISAM, как описано в ссылке. Кажется, это работает. Спасибо Большое.
Тилия
3

Поскольку ответы других (включая те, которые никоим образом не связаны с движком InnoDB) на вопросы об этой исключительной ситуации PDO помечены как дубликаты и перенаправления на эту, я полагаю, что это каноническое место для ответов на эту проблему.

Я сталкивался с этим несколько раз при удалении модуля, и искомая таблица не существует на сайте (потому что она была удалена случайно, потому что в определении схемы в .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 показывает команду SQL с неверным sysntax? Во всяком случае, это не сработало. Это работало в TEST DB, а не в желаемой. Наконец, решение было переключено на движок MyISAM, как описано ниже.
Тилия
Drupal добавляет фигурные скобки для определения имен таблиц и применения префикса базы данных перед выполнением запроса.
Санзанте
1

Это то же самое сообщение об ошибке, которое возникло при переносе Drupal 7 с одного сайта разработки на другой сайт разработки на моем ноутбуке. После проверки таблиц в базе данных Drupal я обнаружил, что полный дамп sql не был импортирован (используя Adminer и опцию «С сервера», adminer.sql).

Найдите таблицы базы данных Drupal 7, которые располагаются ближе к концу дампа SQL в алфавитном порядке, например: user * , views * , webform * , workbench * , xmlsitemap *, чтобы увидеть, все ли они импортированы.

Я использовал drush sql-cli < database.sqlдля импорта дамп sql в базу данных Drupal после удаления всех таблиц базы данных с drush sql-drop.

frederickjh
источник