diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 49cc15dd6..ef3ee6c48 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -23,6 +23,9 @@ class AppServiceProvider extends ServiceProvider \Blade::directive('icon', function($expression) { return ""; }); + + // Allow longer string lengths after upgrade to utf8mb4 + \Schema::defaultStringLength(191); } /** diff --git a/config/database.php b/config/database.php index 92c768245..64dc89864 100644 --- a/config/database.php +++ b/config/database.php @@ -16,6 +16,14 @@ if (env('REDIS_SERVERS', false)) { } } +$mysql_host = env('DB_HOST', 'localhost'); +$mysql_host_exploded = explode(':', $mysql_host); +$mysql_port = env('DB_PORT', 3306); +if (count($mysql_host_exploded) > 0) { + $mysql_host = $mysql_host_exploded[0]; + $mysql_port = intval($mysql_host_exploded[1]); +} + return [ /* @@ -70,12 +78,13 @@ return [ 'mysql' => [ 'driver' => 'mysql', - 'host' => env('DB_HOST', 'localhost'), + 'host' => $mysql_host, 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', - 'collation' => 'utf8_unicode_ci', + 'port' => $mysql_port, + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => false, ], diff --git a/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php b/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php new file mode 100644 index 000000000..8d06d92b1 --- /dev/null +++ b/database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php @@ -0,0 +1,46 @@ +setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + $pdo->exec('ALTER DATABASE '.$database.' CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci'); + $key = 'Tables_in_' . $database; + foreach ($tables as $table) { + $tableName = $table->$key; + $pdo->exec('ALTER TABLE '.$tableName.' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci'); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $database = DB::getDatabaseName(); + $tables = DB::select('SHOW TABLES'); + $pdo = DB::getPdo(); + $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + $pdo->exec('ALTER DATABASE '.$database.' CHARACTER SET utf8 COLLATE utf8_unicode_ci'); + $key = 'Tables_in_' . $database; + foreach ($tables as $table) { + $tableName = $table->$key; + $pdo->exec('ALTER TABLE '.$tableName.' CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci'); + } + } +}