diff --git a/administrator/components/com_admin/script.php b/administrator/components/com_admin/script.php index a41f8aaadf0ad..b3f466bff25fd 100644 --- a/administrator/components/com_admin/script.php +++ b/administrator/components/com_admin/script.php @@ -1860,16 +1860,13 @@ private function serverClaimsUtf8mb4Support($format) private function convertUtf8mb4QueryToUtf8($query) { // If it's not an ALTER TABLE or CREATE TABLE command there's nothing to convert - $beginningOfQuery = substr($query, 0, 12); - $beginningOfQuery = strtoupper($beginningOfQuery); - - if (!in_array($beginningOfQuery, array('ALTER TABLE ', 'CREATE TABLE'))) + if (!preg_match('/^(ALTER|CREATE)\s+TABLE\s+/i', $query)) { return $query; } - // Replace utf8mb4 with utf8 - return str_replace('utf8mb4', 'utf8', $query); + // Replace utf8mb4 with utf8 if not within single or double quotes or name quotes + return preg_replace('/[`"\'][^`"\']*[`"\'](*SKIP)(*FAIL)|utf8mb4/i', 'utf8', $query); } /** diff --git a/libraries/cms/installer/installer.php b/libraries/cms/installer/installer.php index 2ba6a6be16672..3393d700f6a63 100644 --- a/libraries/cms/installer/installer.php +++ b/libraries/cms/installer/installer.php @@ -2465,15 +2465,12 @@ private function serverClaimsUtf8mb4Support($format) private function convertUtf8mb4QueryToUtf8($query) { // If it's not an ALTER TABLE or CREATE TABLE command there's nothing to convert - $beginningOfQuery = substr($query, 0, 12); - $beginningOfQuery = strtoupper($beginningOfQuery); - - if (!in_array($beginningOfQuery, array('ALTER TABLE ', 'CREATE TABLE'))) + if (!preg_match('/^(ALTER|CREATE)\s+TABLE\s+/i', $query)) { return $query; } - // Replace utf8mb4 with utf8 - return str_replace('utf8mb4', 'utf8', $query); + // Replace utf8mb4 with utf8 if not within single or double quotes or name quotes + return preg_replace('/[`"\'][^`"\']*[`"\'](*SKIP)(*FAIL)|utf8mb4/i', 'utf8', $query); } } diff --git a/libraries/joomla/database/driver.php b/libraries/joomla/database/driver.php index 481006b6b2f94..a2ca2c686d056 100644 --- a/libraries/joomla/database/driver.php +++ b/libraries/joomla/database/driver.php @@ -890,16 +890,13 @@ public function convertUtf8mb4QueryToUtf8($query) } // If it's not an ALTER TABLE or CREATE TABLE command there's nothing to convert - $beginningOfQuery = substr($query, 0, 12); - $beginningOfQuery = strtoupper($beginningOfQuery); - - if (!in_array($beginningOfQuery, array('ALTER TABLE ', 'CREATE TABLE'))) + if (!preg_match('/^(ALTER|CREATE)\s+TABLE\s+/i', $query)) { return $query; } - // Replace utf8mb4 with utf8 - return str_replace('utf8mb4', 'utf8', $query); + // Replace utf8mb4 with utf8 if not within single or double quotes or name quotes + return preg_replace('/[`"\'][^`"\']*[`"\'](*SKIP)(*FAIL)|utf8mb4/i', 'utf8', $query); } /**