Перейти к основному содержанию

Drupal — ошибка при импорте базы

Drupal 10

Копировал базу из одного проекта в другой и столкнулся с ошибкой при импорте:

The website encountered an unexpected error. Try again later.
User error: Drupal\Core\Database\IntegrityConstraintViolationException thrown while calling __toString on a Drupal\Core\StringTranslation\TranslatableMarkup object in /public_html/core/modules/mysql/src/Driver/Database/mysql/ExceptionHandler.php on line 45: SQLSTATE[HY000]: General error: 1364 Field 'lid' doesn't have a default value: INSERT INTO "locales_source" ("source", "context", "version") VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2); Array ( [:db_insert_placeholder_0] => For this to work correctly, all tables must have a primary key. The following table(s) do not have a primary key: @tables. [:db_insert_placeholder_1] => [:db_insert_placeholder_2] => 10.2.0 ) in Drupal\Core\StringTranslation\TranslatableMarkup->__toString() (line 20 of core/lib/Drupal/Component/Utility/ToStringTrait.php).

На самом деле проблема не только в Drupal, она может проявиться в любой импортируемой базе. Просто ошибка тогда будет другая. "Field doesn't have a default value" говорит о том, что при вставке строки в таблицу значение по умолчанию не нашлось. Вставка не удалась.

Поскольку я переносил базу данных с рабочего сайта, то явно при экспорте-импорте я где-то накосячил. И свой косяк я обнаружил в настройкам импорта базы в PHPMyAdmin. Я забыл поставить галку:

  • Не использовать атрибут AUTO_INCREMENT для нулевых значений (Do not use AUTO_INCREMENT for zero values)
drupal

Поведение MySQL по умолчанию: если в столбец с AUTO_INCREMENT передать 0, система воспримет это как NULL и сгенерирует для него следующее доступное уникальное значение. Это может привести к конфликтам, особенно в таблицах, где 0 имеет специальное значение (например, в таблице users для анонимного пользователя с uid = 0).

Данная галка в PHPMyAdmin фактически включает SQL режим NO_AUTO_VALUE_ON_ZERO перед импортом дампа. Этот режим как раз разрешает вставку значения 0 в столбец с AUTO_INCREMENT, что и решает проблему совместимости с Drupal. 

Не забываем ставить эту галку при импорте данных.

Теги

 

Похожие материалы

Включаем Database Mail в Microsoft SQL Server 2014

Для того чтобы MSSQL сервер мог слать уведомления на почту, необходимо настроить Database Mail фичу. Для чего нужны уведомления? Я, например, хочу получать письмо, когда заканчивается бэкап. Функционал этой фичи на самом деле гораздо богаче. При сноровке можно по почте слать SQL запросы и получать результаты. В моём случае это не требуется.

Теги