48 lines
1.7 KiB
JavaScript
48 lines
1.7 KiB
JavaScript
const url = require('url');
|
||
|
||
function getDatabaseName(databaseUrl) {
|
||
try {
|
||
const parsed = new url.URL(databaseUrl);
|
||
// pathname like "/dbname"; strip leading '/'
|
||
const dbPath = parsed.pathname || '';
|
||
const dbName = dbPath.startsWith('/') ? dbPath.slice(1) : dbPath;
|
||
return dbName.split('?')[0];
|
||
} catch {
|
||
// Fallback: basic parsing
|
||
const parts = (databaseUrl || '').split('/');
|
||
return (parts[parts.length - 1] || '').split('?')[0];
|
||
}
|
||
}
|
||
|
||
async function setupUtf8mb4(prisma) {
|
||
const databaseUrl = process.env.DATABASE_URL || '';
|
||
|
||
// SQLite için bu fonksiyonu atla
|
||
if (databaseUrl.includes('sqlite') || databaseUrl.includes('.db')) {
|
||
console.log('ℹ️ SQLite kullanılıyor. UTF8MB4 kurulumu atlandı.');
|
||
return;
|
||
}
|
||
|
||
const dbName = getDatabaseName(databaseUrl);
|
||
if (!dbName) {
|
||
console.warn('⚠️ DATABASE_URL bulunamadı veya veritabanı adı çözümlenemedi. UTF8MB4 kurulumu atlandı.');
|
||
return;
|
||
}
|
||
|
||
// Only run for MySQL/MariaDB
|
||
try {
|
||
await prisma.$executeRawUnsafe(`ALTER DATABASE \`${dbName}\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci`);
|
||
console.log('✅ Veritabanı varsayılan karakter seti/collation utf8mb4 olarak ayarlandı.');
|
||
} catch (err) {
|
||
console.warn('⚠️ Veritabanı charset ayarlanırken hata oluştu:', err?.message || err);
|
||
}
|
||
|
||
try {
|
||
await prisma.$executeRawUnsafe('ALTER TABLE `categories` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci');
|
||
console.log('✅ `categories` tablosu utf8mb4 olarak dönüştürüldü.');
|
||
} catch (err) {
|
||
console.warn('⚠️ `categories` tablosu dönüştürülürken hata oluştu:', err?.message || err);
|
||
}
|
||
}
|
||
|
||
module.exports = { setupUtf8mb4 }; |