- Исправлен N8N_CODE_PROCESS_UPLOADED_FILES_FIXED.js: использовать uploads_field_labels[0] вместо [grp] - Создан SQL_CLAIMSAVE_FIXED_NEW_FLOW_DEDUP.sql с дедупликацией documents_meta - Создан SQL_CLEANUP_DOCUMENTS_META_DUPLICATES.sql для очистки существующих дубликатов - Создан полный уникальный индекс idx_document_texts_hash_unique на document_texts(file_hash) - Добавлен SESSION_LOG_2025-11-28_documents_dedup.md с описанием всех изменений Fixes: - field_label теперь корректно отображает 'Переписка' вместо 'group-2' - documents_meta не накапливает дубликаты при повторных сохранениях - ON CONFLICT (file_hash) теперь работает для document_texts
105 lines
3.1 KiB
PHP
105 lines
3.1 KiB
PHP
<?php
|
||
/**
|
||
* Исправление проблемы с collation в БД Nextcloud
|
||
* Заменяет utf8mb3_general_ci на utf8mb4_general_ci
|
||
*/
|
||
|
||
error_reporting(E_ALL);
|
||
ini_set('display_errors', 1);
|
||
|
||
echo "=== ИСПРАВЛЕНИЕ COLLATION В БД NEXTCLOUD ===\n";
|
||
echo str_repeat("=", 80) . "\n\n";
|
||
|
||
// Подключение к БД Nextcloud
|
||
$host = '192.168.128.3';
|
||
$user = 'nextcloud';
|
||
$password = 'nextcloud_password';
|
||
$database = 'nextcloud';
|
||
|
||
try {
|
||
$db = new mysqli($host, $user, $password, $database);
|
||
|
||
if ($db->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);
|
||
}
|
||
|
||
|