此问题在此处已有答案:
Laravel Migration Error: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes(39个回答)
三年前关闭。
我正在使用Laravel,我有迁移功能:
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->increments('id');
$table->string('title')->unique();
$table->string('slug')->unique();
$table->string('subtitle');
$table->integer('price');
$table->text('description');
$table->boolean('featured')->default(false);
$table->timestamps();
});
}
字符串
当我在我的cmd上执行php artisan migrate
时,我得到错误
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Illuminate\Database\QueryException
SQLSTATE[42000]: Syntax error or access violation: 1071 La clé est trop longue. Longueur maximale: 1000 (SQL: alter table `users` add unique `users_username_unique`(`username`))
at C:\Users\linda\lynda-master\vendor\laravel\framework\src\Illuminate\Database\Connection.php:671
667| // If an exception occurs when attempting to run a query, we'll format the error
668| // message to include the bindings with SQL, which will make this exception a
669| // lot more helpful to the developer instead of just the database's errors.
670| catch (Exception $e) {
> 671| throw new QueryException(
672| $query, $this->prepareBindings($bindings), $e
673| );
674| }
675|
1 C:\Users\linda\lynda-master\vendor\laravel\framework\src\Illuminate\Database\Connection.php:464
PDOException::("SQLSTATE[42000]: Syntax error or access violation: 1071 La clé est trop longue. Longueur maximale: 1000")
2 C:\Users\linda\lynda-master\vendor\laravel\framework\src\Illuminate\Database\Connection.php:464
PDOStatement::execute()
型
我把它添加到我的AppServiceProvider
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Schema::defaultStringLength(191);
}
}
型
这是我的database.php
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'laravel-ecommerce'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => 'InnoDB',
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
型
我的.env
看起来像:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel-ecommerce
DB_USERNAME=root
DB_PASSWORD=
型
我已经在我的php.ini中取消了扩展名;extension=pdo_mysql我正在使用WAMP服务器,并且已经尝试过了:
php artisan cache:clear
php artisan config:clear
php artisan config:cache
型
当我使用mariaDB而不是mysql来创建我的数据库时,我得到了这个错误未知的数据库
Illuminate\Database\QueryException
SQLSTATE[HY000] [1049] Base 'laravel-ecommerce' inconnue (SQL: select * from information_schema.tables where table_schema = laravel-ecommerce and table_name = migrations and table_type = 'BASE TABLE')
at C:\Users\linda\lynda-master\vendor\laravel\framework\src\Illuminate\Database\Connection.php:671
667| // If an exception occurs when attempting to run a query, we'll format the error
668| // message to include the bindings with SQL, which will make this exception a
669| // lot more helpful to the developer instead of just the database's errors.
670| catch (Exception $e) {
> 671| throw new QueryException(
672| $query, $this->prepareBindings($bindings), $e
673| );
674| }
675|
1 C:\Users\linda\lynda-master\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70
PDOException::("SQLSTATE[HY000] [1049] Base 'laravel-ecommerce' inconnue")
2 C:\Users\linda\lynda-master\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:70
PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=laravel-ecommerce", "root", "", [])
型
1条答案
按热度按时间hmmo2u0o1#
此问题可能是由于Mariadb或旧版本的MySQL造成的。
解决方案1:
编辑位于
/app/Providers/AppServiceProvider.php
的AppServiceProvider.php文件,并在 Boot 方法中更新默认字符串长度:字符串
解决方案2:
将Mariadb改为mysql,也可以解决这个问题。
方案三:
在
config/database.php
中,将此行替换为mysql型
与
型
希望其中一个解决方案对你有用!!