diff --git a/app/Http/Controllers/MysqlController.php b/app/Http/Controllers/MysqlController.php index 39a9652..5a7584f 100644 --- a/app/Http/Controllers/MysqlController.php +++ b/app/Http/Controllers/MysqlController.php @@ -91,7 +91,7 @@ class MysqlController extends Controller 'db_user' => ['required', 'string'], 'db_pass' => ['required', 'string'], 'charset' => ['required', 'string'], - 'collation' => ['nullable', 'string'], + 'collation' => ['required', 'string'], ]); $user = $request->user(); @@ -112,11 +112,7 @@ class MysqlController extends Controller } // Create database with charset and collation - $sql = "CREATE DATABASE `$name` CHARACTER SET $charset"; - if ($collation) { - $sql .= " COLLATE $collation"; - } - DB::statement($sql); + DB::statement("CREATE DATABASE `$name` CHARACTER SET $charset COLLATE $collation"); // Create user (if not exists) and grant all privileges on the new DB DB::statement("CREATE USER IF NOT EXISTS `$dbUser`@'localhost' IDENTIFIED BY '$dbPass'"); diff --git a/resources/js/Pages/Mysql/Partials/CreateDatabaseForm.jsx b/resources/js/Pages/Mysql/Partials/CreateDatabaseForm.jsx index 02b0faf..efe2726 100644 --- a/resources/js/Pages/Mysql/Partials/CreateDatabaseForm.jsx +++ b/resources/js/Pages/Mysql/Partials/CreateDatabaseForm.jsx @@ -23,7 +23,7 @@ export default function CreateDatabaseForm() { db_user: '', db_pass: '', charset: 'utf8mb4', - collation: '', + collation: 'utf8mb4_unicode_ci', }); useEffect(() => { @@ -38,9 +38,13 @@ export default function CreateDatabaseForm() { const filtered = collations.filter(collation => collation.charset === data.charset); setFilteredCollations(filtered); - // If current collation is not valid for the selected charset, clear it + // If current collation is not valid for the selected charset, set to default if (data.collation && !filtered.find(c => c.name === data.collation)) { - setData('collation', ''); + // Find the default collation for this charset + const defaultCollation = filtered.find(c => c.default === 'Yes') || filtered[0]; + if (defaultCollation) { + setData('collation', defaultCollation.name); + } } } else { setFilteredCollations(collations); @@ -53,6 +57,16 @@ export default function CreateDatabaseForm() { const response = await axios.get(route('mysql.charsets-collations')); setCharsets(response.data.charsets); setCollations(response.data.collations); + + // Set default collation for utf8mb4 if not already set + if (data.charset === 'utf8mb4' && !data.collation) { + const utf8mb4Collations = response.data.collations.filter(c => c.charset === 'utf8mb4'); + const defaultCollation = utf8mb4Collations.find(c => c.default === 'Yes') || utf8mb4Collations.find(c => c.name === 'utf8mb4_unicode_ci') || utf8mb4Collations[0]; + if (defaultCollation) { + setData('collation', defaultCollation.name); + } + } + setFilteredCollations(response.data.collations); } catch (error) { console.error('Error fetching charsets and collations:', error); @@ -128,7 +142,7 @@ export default function CreateDatabaseForm() {
- +