Files
crm.clientright.ru/fix_nextcloud_collation.php
Fedor 840acca51a feat(documents): дедупликация documents_meta и исправление field_label
- Исправлен 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
2025-11-28 18:16:53 +03:00

105 lines
3.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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);
}