Upgrading Concrete from 8.5 to 9.x

Jun 21, 2024
By myq for Developers

Upgrading from Concrete v8.5 through 9.x can sometimes lead to some confusion. This document collects various challenges and solutions to aid you in your journey.

Background

Why is this upgrade path difficult? One of the main reasons is that software has to adapt to a changing landscape of other vendors in the stack, including databases, PHP, and changes in best practices regarding data encoding and storage. Concrete v8.5.x included changes to accommodate a larger set of characters that could be stored in the database. This included a change in charset from utf8 to utf8mb4.

Road blocks

One of the errors you might encounter is in migration 20190509205043 which ususally occurs when upgrading to 8.5.3 or 8.5.4:

Executing migration: 20190509205043
Refreshing schema for Concrete\Core\Entity\Express\Entry...
Refreshing schema for Concrete\Core\Entity\Express\Control\PublicIdentifierControl...
Refreshing schema for Concrete\Core\Entity\Express\Control\Control...

In AbstractMySQLDriver.php line 115:

  An exception occurred while executing 'ALTER TABLE ExpressFormFieldSetPublicIdentifierControls ADD CONSTRAINT FK_67180C04BF396750 FOREIGN KEY (id) REFERENCES ExpressFormFieldSetControls (id) ON DELETE CASCADE':

  SQLSTATE[HY000]: General error: 1005 Can't create table `<something>`.`ExpressFormFieldSetPublicIdentifierControls` (errno: 150 "Foreign key constraint is incorrectly formed")

This is caused by having mixed collations in the database tables.

The short answer to this problem is to run c5:database:charset:set utf8mb4, however, there are likely additional steps you should take, including backing up the database first. It's best to try this fix on a copy of your website first to ensure that it will work as expected.

Recent Tutorials
Customize the default page title
Mar 12, 2025

Change the default " :: " and/or "site name :: page title" formatting separator to something else.

Configure Composer to work with a Page Type
Feb 20, 2025
By myq.

Fix the "Unable to load block into composer. You must edit this content from within the context of the page." error message

Permissions for editors in a multilingual site
Feb 2, 2025
By myq.

How to set up a multilingual Concrete CMS site for groups of language-specific editors

Restoring deleted pages using advanced search
Jan 16, 2025
By myq.

How to recover deleted pages when there are more than a few to choose from.

How to Automate the Copyright Year
Dec 27, 2024

Learn how to keep your website's copyright year updated automatically in Concrete CMS.

How to change the path of a group of pages
Dec 23, 2024
By myq.

Change the canonical path without breaking things

Improvements?

Let us know by posting here.