解決Laravel項目MySQL 5.6數(shù)據(jù)庫Migration創(chuàng)建報錯的方法
開發(fā)環(huán)鏡:PHP > 7.0
Laravel 5.5版本
數(shù)據(jù)庫:MySQL V5.6
對于較新版本的Laravel框架,建議使用MySQL 5.7數(shù)據(jù)庫以上版本,避免類為字符集等問題,而造成Migration創(chuàng)建數(shù)據(jù)庫報錯等問題。
但對于之前就使用MySQL 5.6的數(shù)據(jù)庫,我們應(yīng)該如何解決Migration創(chuàng)建數(shù)據(jù)庫報錯的問題呢?下面我們提供兩個解決的方案:
方法1、直接修改字符集
修改config\database.php文件
新版本Laravel MySQL采用utf8mb4字符集,需要修改代碼:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
修改為:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
再使用php artisan migrate即可在MySQL 5.6中創(chuàng)建數(shù)據(jù)庫成功。
方法2、修改AppServiceProvider.php文件
1、修改App\Providers\AppServiceProvider.php文件
public function boot()
{
//
}
修改為:
use Schema; //引入Schema
public function boot()
{
//
Schema::defaultStringLength(191);
}
Schema::defaultStringLength(191)指定字符集長度
然后再使用php artisan migrate命令創(chuàng)建數(shù)據(jù)庫成功!
開發(fā)環(huán)鏡:PHP > 7.0
Laravel 5.5版本
數(shù)據(jù)庫:MySQL V5.6
對于較新版本的Laravel框架,建議使用MySQL 5.7數(shù)據(jù)庫以上版本,避免類為字符集等問題,而造成Migration創(chuàng)建數(shù)據(jù)庫報錯等問題。
但對于之前就使用MySQL 5.6的數(shù)據(jù)庫,我們應(yīng)該如何解決Migration創(chuàng)建數(shù)據(jù)庫報錯的問題呢?下面我們提供兩個解決的方案:
方法1、直接修改字符集
修改config\database.php文件
新版本Laravel MySQL采用utf8mb4字符集,需要修改代碼:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
修改為:
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
再使用php artisan migrate即可在MySQL 5.6中創(chuàng)建數(shù)據(jù)庫成功。
方法2、修改AppServiceProvider.php文件
1、修改App\Providers\AppServiceProvider.php文件
public function boot()
{
//
}
修改為:
use Schema; //引入Schema
public function boot()
{
//
Schema::defaultStringLength(191);
}
Schema::defaultStringLength(191)指定字符集長度
然后再使用php artisan migrate命令創(chuàng)建數(shù)據(jù)庫成功!