// MYSQL
// Split out port from host if set
-$mysql_host = env('DB_HOST', 'localhost');
-$mysql_host_exploded = explode(':', $mysql_host);
-$mysql_port = env('DB_PORT', 3306);
-if (count($mysql_host_exploded) > 1) {
- $mysql_host = $mysql_host_exploded[0];
- $mysql_port = intval($mysql_host_exploded[1]);
+$mysqlHost = env('DB_HOST', 'localhost');
+$mysqlHostExploded = explode(':', $mysqlHost);
+$mysqlPort = env('DB_PORT', 3306);
+$mysqlHostIpv6 = str_starts_with($mysqlHost, '[');
+if ($mysqlHostIpv6 && str_contains($mysqlHost, ']:')) {
+ $mysqlHost = implode(':', array_slice($mysqlHostExploded, 0, -1));
+ $mysqlPort = intval(end($mysqlHostExploded));
+} else if (!$mysqlHostIpv6 && count($mysqlHostExploded) > 1) {
+ $mysqlHost = $mysqlHostExploded[0];
+ $mysqlPort = intval($mysqlHostExploded[1]);
}
return [
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
- 'host' => $mysql_host,
+ 'host' => $mysqlHost,
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
- 'port' => $mysql_port,
+ 'port' => $mysqlPort,
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
- 'prefix' => '',
+ // Prefixes are only semi-supported and may be unstable
+ // since they are not tested as part of our automated test suite.
+ // If used, the prefix should not be changed otherwise you will likely receive errors.
+ 'prefix' => env('DB_TABLE_PREFIX', ''),
'prefix_indexes' => true,
'strict' => false,
'engine' => null,
'database' => 'bookstack-test',
'username' => env('MYSQL_USER', 'bookstack-test'),
'password' => env('MYSQL_PASSWORD', 'bookstack-test'),
- 'port' => $mysql_port,
+ 'port' => $mysqlPort,
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'migrations' => 'migrations',
// Redis configuration to use if set
- 'redis' => env('REDIS_SERVERS', false) ? $redisConfig : [],
+ 'redis' => $redisConfig ?? [],
];