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() {