connect_error) { throw new Exception("Ошибка подключения: " . $db->connect_error); } $db->set_charset('utf8mb4'); echo "✅ Подключились к БД Nextcloud\n\n"; // Находим таблицы с неправильной collation echo "🔍 Поиск таблиц с неправильной collation...\n"; $result = $db->query(" SELECT TABLE_NAME, TABLE_COLLATION FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'nextcloud' AND TABLE_COLLATION LIKE '%utf8mb3%' "); $tables = []; while ($row = $result->fetch_assoc()) { $tables[] = $row['TABLE_NAME']; echo " - {$row['TABLE_NAME']}: {$row['TABLE_COLLATION']}\n"; } if (empty($tables)) { echo "✅ Все таблицы имеют правильную collation\n"; exit(0); } echo "\n📊 Найдено таблиц для исправления: " . count($tables) . "\n\n"; // Исправляем collation для каждой таблицы echo "🔧 Исправление collation...\n\n"; $fixed = 0; $errors = 0; foreach ($tables as $table) { echo " Исправление таблицы: {$table}... "; // Изменяем collation таблицы $sql = "ALTER TABLE `{$table}` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci"; if ($db->query($sql)) { echo "✅\n"; $fixed++; } else { echo "❌ Ошибка: " . $db->error . "\n"; $errors++; } } echo "\n"; echo str_repeat("=", 80) . "\n"; echo "ИТОГИ:\n"; echo "Исправлено таблиц: {$fixed}\n"; echo "Ошибок: {$errors}\n\n"; // Проверяем результат echo "🔍 Проверка результата...\n"; $result = $db->query(" SELECT COUNT(*) as count FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'nextcloud' AND TABLE_COLLATION LIKE '%utf8mb3%' "); $row = $result->fetch_assoc(); if ($row['count'] == 0) { echo "✅ Все таблицы исправлены!\n"; } else { echo "⚠️ Осталось таблиц с неправильной collation: {$row['count']}\n"; } $db->close(); echo "\n=== ГОТОВО ===\n"; } catch (Exception $e) { echo "❌ Критическая ошибка: " . $e->getMessage() . "\n"; exit(1); }