1.应用场景

数据库中数据表的迁移, 生成与回退, 便于管理数据库.

2.学习/操作

环境:

Windows10 64位 专业版

laravel 5.8

 

2.1 生成迁移文件

并且修改迁移文件,使得更加满足自身应用场景.

TBD

 

2.2 运行迁移文件

生成数据表

TBD

 

2.3 TBD

 

 

 

 

后续整理

...

3.问题

1.执行数据库迁移,出现报错信息如下:

SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes (SQL: alter table `users` add unique `users_name_unique`(`name`))

 

报错原因: 超过数据表索引长度和的限制

解决方法: 修改框架中的默认索引最大长度

国外官网手册: https://laravel.com/docs/master/migrations#creating-indexes

 

https://blog.csdn.net/lengyue1084/article/details/88216101

1.在app/Providers/AppServiceProvider.php文件修改boot方法

同时, 引入类文件,如下

use Illuminate\Support\Facades\Schema;//添加

 

2.boot方法中添加如下代码:

public function boot()
{
    //
    Schema::defaultStringLength(m);//设置默认长度  当表的存储引擎为myisam且编码utf8mb4时, m <= 250, 当时innodb时, m <= 768 
}

 

简单讲:

myisam存储引擎在创建索引的时候,索引键长度是有一个较为严格的长度限制的,所有索引键最大长度总和不能超过1000,而且不是实际数据长度的总和,而是索引键字段定义长度的总和。

主要字符集的计算方式:
latin1 = 1 byte = 1 character
uft8 = 3 bytes = 1 characters

uft8mb4 = 4 bytes = 1 characters
gbk = 2 bytes = 1 characters

 

innodb最大是3072Bytes, 可自行换算.

 

详情:

https://www.cnblogs.com/yuyue2014/p/4339090.html  //mysql索引长度的一些限制

 

2. 命令行下[使用的php-cli来执行],填充数据

php artisan tinker 

Laravel 数据库-迁移

Laravel 数据库-迁移

 

 

文本命令:

php artisan tinker

Psy Shell v0.9.9 (PHP 7.3.4 — cli) by Justin Hileman
>>> use App\User;
>>> $user = new User;
=> App\User {#2936}
>>> $user->name = '学院君';
=> "学院君"
>>> $user->email = '[email protected]';
=> "[email protected]"
>>> $user->password = bcrypt('123456');
=> "$2y$10$KbT7cDqoVyvb/KP1o6zilOnAIW087r44B1p6JDk/Q0BNoIjjKTTgC"
>>> $user->save();
=> true
>>>
 

 

 

后续补充

...

4.参考

https://xueyuanjun.com/books/laravel-docs-5_8/chapter/database  //数据库操作

后续补充

...

相关文章: