Upgrading old site, have DB ssue

Silverstripe Version: from 3.1.9 to 5.4

Question:

I am using WAMP and have set PHP to 8.2.26. I used composer to install Silverstripe version 5.4. I took the code and templates across and updated them. They seemed to work. So I took the database from the old live site and tried to connect to the new developing site to the old code but I have run into a specific issue I can’t seem to get around.

Context: I have some namespaces, I have App; and App\Custom and App\SoftwareUpdate

Page.php is App/Page.php or App\Page.php, I’m typing this by hand and its at the end of a long day and I’m feeling quite frustrated so I am sure I have just typed the wrong slash here even though I know it is correct in my code.

No matter what changes I seem to make in YML files, or the database, or in my code, I have the same problem.

ERROR [Emergency]: Uncaught SilverStripe\ORM\Connect\DatabaseException: Couldn’t run query:

ALTER TABLE “SiteTree” CHANGE “ClassName” “ClassName” enum(‘SilverStripe\CMS\Model\SiteTree’,‘App\Page’,‘App\Custom\TTECPage’,‘App\Custom\ArticleHolder’,‘App\Custom\ArticlePage’,‘App\Custom\DistributorHolder’,‘App\Custom\DistributorPage’,‘App\Custom\DownloadHolder’,‘App\Custom\DownloadPage’,‘App\Custom\HomePage’,‘App\Custom\ProductCategoryPage’,‘App\Custom\ProductImagePage’,‘App\Custom\ProductPage’,‘App\Custom\StructuredProduct’,‘’) character set utf8mb4 collate utf8mb4_unicode_ci default ‘Page’

Invalid default value for ‘ClassName’
IN GET dev/build
Line 63 in C:\wamp64\www\ttec2025-6.1\vendor\silverstripe\framework\src\ORM\Connect\DBConnector.php

Source

54: if (!empty($sql)) {
55: $formatter = SQLFormatter::create();
56: $formattedSQL = $formatter->formatPlain($sql);
57: $msg = “Couldn’t run query:\n\n{$formattedSQL}\n\n{$msg}”;
58: }
59:
60: if ($errorLevel === E_USER_ERROR) {
61: // Treating errors as exceptions better allows for responding to errors
62: // in code, such as credential checking during installation

  • 63: throw new DatabaseException($msg, 0, null, $sql, $parameters);
    64: } else {
    65: user_error($msg ?? ‘’, $errorLevel ?? 0);
    66: }
    67: }
    68:
    69: protected function duplicateEntryError(

Trace

SilverStripe\ORM\Connect\DBConnector->databaseError(Couldn’t run query:

ALTER TABLE “SiteTree” CHANGE “ClassName” “ClassName” enum(‘SilverStripe\CMS\Model\SiteTree’,‘App\Page’,‘App\Custom\TTECPage’,‘App\Custom\ArticleHolder’,‘App\Custom\ArticlePage’,‘App\Custom\DistributorHolder’,‘App\Custom\DistributorPage’,‘App\Custom\DownloadHolder’,‘App\Custom\DownloadPage’,‘App\Custom\HomePage’,‘App\Custom\ProductCategoryPage’,‘App\Custom\ProductImagePage’,‘App\Custom\ProductPage’,‘App\Custom\StructuredProduct’,‘’) character set utf8mb4 collate utf8mb4_unicode_ci default ‘Page’

Invalid default value for ‘ClassName’, 256, ALTER TABLE “SiteTree” CHANGE “ClassName” “ClassName” enum(‘SilverStripe\CMS\Model\SiteTree’,‘App\Page’,‘App\Custom\TTECPage’,‘App\Custom\ArticleHolder’,‘App\Custom\ArticlePage’,‘App\Custom\DistributorHolder’,‘App\Custom\DistributorPage’,‘App\Custom\DownloadHolder’,‘App\Custom\DownloadPage’,‘App\Custom\HomePage’,‘App\Custom\ProductCategoryPage’,‘App\Custom\ProductImagePage’,‘App\Custom\ProductPage’,‘App\Custom\StructuredProduct’,‘’) character set utf8mb4 collate utf8mb4_unicode_ci default ‘Page’, Array)
MySQLiConnector.php:425

SilverStripe\ORM\Connect\MySQLiConnector->throwRelevantError(Invalid default value for ‘ClassName’, 1067, 256, ALTER TABLE “SiteTree” CHANGE “ClassName” “ClassName” enum(‘SilverStripe\CMS\Model\SiteTree’,‘App\Page’,‘App\Custom\TTECPage’,‘App\Custom\ArticleHolder’,‘App\Custom\ArticlePage’,‘App\Custom\DistributorHolder’,‘App\Custom\DistributorPage’,‘App\Custom\DownloadHolder’,‘App\Custom\DownloadPage’,‘App\Custom\HomePage’,‘App\Custom\ProductCategoryPage’,‘App\Custom\ProductImagePage’,‘App\Custom\ProductPage’,‘App\Custom\StructuredProduct’,‘’) character set utf8mb4 collate utf8mb4_unicode_ci default ‘Page’, Array)
MySQLiConnector.php:212

SilverStripe\ORM\Connect\MySQLiConnector->query(ALTER TABLE “SiteTree” CHANGE “ClassName” “ClassName” enum(‘SilverStripe\CMS\Model\SiteTree’,‘App\Page’,‘App\Custom\TTECPage’,‘App\Custom\ArticleHolder’,‘App\Custom\ArticlePage’,‘App\Custom\DistributorHolder’,‘App\Custom\DistributorPage’,‘App\Custom\DownloadHolder’,‘App\Custom\DownloadPage’,‘App\Custom\HomePage’,‘App\Custom\ProductCategoryPage’,‘App\Custom\ProductImagePage’,‘App\Custom\ProductPage’,‘App\Custom\StructuredProduct’,‘’) character set utf8mb4 collate utf8mb4_unicode_ci default ‘Page’, 256)
Database.php:159

SilverStripe\ORM\Connect\Database->SilverStripe\ORM\Connect{closure}(ALTER TABLE “SiteTree” CHANGE “ClassName” “ClassName” enum(‘SilverStripe\CMS\Model\SiteTree’,‘App\Page’,‘App\Custom\TTECPage’,‘App\Custom\ArticleHolder’,‘App\Custom\ArticlePage’,‘App\Custom\DistributorHolder’,‘App\Custom\DistributorPage’,‘App\Custom\DownloadHolder’,‘App\Custom\DownloadPage’,‘App\Custom\HomePage’,‘App\Custom\ProductCategoryPage’,‘App\Custom\ProductImagePage’,‘App\Custom\ProductPage’,‘App\Custom\StructuredProduct’,‘’) character set utf8mb4 collate utf8mb4_unicode_ci default ‘Page’)
Database.php:258

SilverStripe\ORM\Connect\Database->benchmarkQuery(ALTER TABLE “SiteTree” CHANGE “ClassName” “ClassName” enum(‘SilverStripe\CMS\Model\SiteTree’,‘App\Page’,‘App\Custom\TTECPage’,‘App\Custom\ArticleHolder’,‘App\Custom\ArticlePage’,‘App\Custom\DistributorHolder’,‘App\Custom\DistributorPage’,‘App\Custom\DownloadHolder’,‘App\Custom\DownloadPage’,‘App\Custom\HomePage’,‘App\Custom\ProductCategoryPage’,‘App\Custom\ProductImagePage’,‘App\Custom\ProductPage’,‘App\Custom\StructuredProduct’,‘’) character set utf8mb4 collate utf8mb4_unicode_ci default ‘Page’, Closure)
Database.php:156

SilverStripe\ORM\Connect\Database->query(ALTER TABLE “SiteTree” CHANGE “ClassName” “ClassName” enum(‘SilverStripe\CMS\Model\SiteTree’,‘App\Page’,‘App\Custom\TTECPage’,‘App\Custom\ArticleHolder’,‘App\Custom\ArticlePage’,‘App\Custom\DistributorHolder’,‘App\Custom\DistributorPage’,‘App\Custom\DownloadHolder’,‘App\Custom\DownloadPage’,‘App\Custom\HomePage’,‘App\Custom\ProductCategoryPage’,‘App\Custom\ProductImagePage’,‘App\Custom\ProductPage’,‘App\Custom\StructuredProduct’,‘’) character set utf8mb4 collate utf8mb4_unicode_ci default ‘Page’, 256)
MySQLDatabase.php:415

SilverStripe\ORM\Connect\MySQLDatabase->query(ALTER TABLE “SiteTree” CHANGE “ClassName” “ClassName” enum(‘SilverStripe\CMS\Model\SiteTree’,‘App\Page’,‘App\Custom\TTECPage’,‘App\Custom\ArticleHolder’,‘App\Custom\ArticlePage’,‘App\Custom\DistributorHolder’,‘App\Custom\DistributorPage’,‘App\Custom\DownloadHolder’,‘App\Custom\DownloadPage’,‘App\Custom\HomePage’,‘App\Custom\ProductCategoryPage’,‘App\Custom\ProductImagePage’,‘App\Custom\ProductPage’,‘App\Custom\StructuredProduct’,‘’) character set utf8mb4 collate utf8mb4_unicode_ci default ‘Page’, 256)
DBSchemaManager.php:133

SilverStripe\ORM\Connect\DBSchemaManager->query(ALTER TABLE “SiteTree” CHANGE “ClassName” “ClassName” enum(‘SilverStripe\CMS\Model\SiteTree’,‘App\Page’,‘App\Custom\TTECPage’,‘App\Custom\ArticleHolder’,‘App\Custom\ArticlePage’,‘App\Custom\DistributorHolder’,‘App\Custom\DistributorPage’,‘App\Custom\DownloadHolder’,‘App\Custom\DownloadPage’,‘App\Custom\HomePage’,‘App\Custom\ProductCategoryPage’,‘App\Custom\ProductImagePage’,‘App\Custom\ProductPage’,‘App\Custom\StructuredProduct’,‘’) character set utf8mb4 collate utf8mb4_unicode_ci default ‘Page’)
MySQLSchemaManager.php:110

Details of your query go here

// Include any relevant code. If you have a lot of code, link to a gist instead.

Google Gemini tells me to say: “SilverStripe 5.4 migration on MySQL 9.1. Getting Invalid default value for 'ClassName' because the generated SQL uses DEFAULT 'Page', but all my classes are now namespaced under App\. Even with classname_value_remapping in YAML, the builder is forcing the legacy ‘Page’ string as the default."

Anyone seen anything like this and any hints on how to proceed?

Found the issue. I had created a php file that insisted on ‘Page’ in the global namespace. Removed that to uncover the real issue. It is a completely different issue and it is very basic so I will open a new question for that.