文档章节

Laravel 5.4 初试。 Migrate遇到的数据库问题

zgldh
 zgldh
发布于 2017/01/25 11:20
字数 422
阅读 396
收藏 0

听说 Laravel 出 5.4 了,赶忙装一个新的试试手。

使用的是 Laravel 自带的安装器。 composer global install laravel/installer 然后 laravel new blog 喝杯茶就装好了。

之后配好数据库,执行 php artisan migrate。但是遇到了问题:

E:\wwwroot\blog>php artisan migrate
Migration table created successfully.

  [Illuminate\Database\QueryException]
  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`))

  [PDOException]
  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

上 stackoverflow 查不明所以。 有人说是数据表引擎的原因(InnoDB 的 key 支持 767 字节,而 MyISAM 支持 1000 字节。 但是我尝试了 MyISAM 仍然报同样错误,只是 767 变为了 1000。

后来我发现 config/database.php 和以前不一样了:

老的 5.3

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

新的 5.4

        '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', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

发现没 5.4 开始使用 utf8mb4 数据库字符集了。这个字符集在 MySQL 5.5.3 开始支持。

utf8 和 utf8mb4 区别看这里

本机 MySQL 版本为 5.5.28,尝试添加

innodb_file_format=barracuda
innodb_file_per_table=1
innodb_large_prefix=1

进行修复,但是失败。 因为创建的表格的默认行格式都是 COMPACT。而 innodb_large_prefix 对 COMPACT 无效。

最后决定装 MySQL 5.7.9 了,因为 5.7.9 默认的行格式是 DYNAMIC。

当然最简单的就是将 config/database.php 改为

            'charset' => 'utf8',
            'collation' => 'utf8_unicode_ci',

还有更简单的 https://laravel-news.com/laravel-5-4-key-too-long-error

修改 AppServiceProvider.php

use Illuminate\Support\Facades\Schema;

public function boot()
{
    Schema::defaultStringLength(191);
}

© 著作权归作者所有

zgldh
粉丝 101
博文 36
码字总数 47009
作品 2
高级程序员
私信 提问
laravel中artisan工具(命令)的使用详解

artisan工具,首先,这个是一个php文件,它放在我们laravel框架的根目录 Artisan工具简介 Artisan 是 Laravel 中自带的命令行工具的名称。它提供了一些对您的应用开发有帮助的命令。它是由强大的...

bengozhong
2018/07/06
535
0
Laravel学习笔记之一

1:Laravel的启动 切换到laravel项目下 www/my_laravel 开启laravel服务 php artisan serve 2:快速创建一个laravel控制器/模型 php artisan make:controller NameController; php artisan ......

雨醉风尘
2016/04/17
66
0
laravel一些特别爽的指令php artisan

刚开始玩laravel的时候,遇到的每一个问题,我是手动创建,然后粘贴复制,命名空间,有时候还会报错,太麻烦了,最近做项目,偶然间发现了新大陆,哈哈哈,就是php artisan这个指令,据说,a...

老鼠会怕喵
2016/12/21
976
3
Laravel 5.5 新特性预览

Laravel 5.5 需要 7.0+ 版本的 PHP。想要了解当前 PHP 版本所带来的功能,可以参考我们为你提供的回顾。 Laravel 5.5 也将会是接下来的一个 LTS(长期支持)版本。 这就意味着它拥有两年修复...

oschina
2017/08/30
4.7K
20
Laravel4.1数据库 数据库迁移(三)

该章节内容翻译自《Database Migration using Laravel》,一切版权为原作者。 原作者:Stable Host, LLC 正文: Laravel鼓励敏捷、迭代的开发方式,我们没指望在第一次就获得所有正确的。相反...

botkenni
2016/11/16
24
0

没有更多内容

加载失败,请刷新页面

加载更多

MySQL8.0.17 - Multi-Valued Indexes 简述

本文主要简单介绍下8.0.17新引入的功能multi-valued index, 顾名思义,索引上对于同一个Primary key, 可以建立多个二级索引项,实际上已经对array类型的基础功能做了支持 (感觉官方未来一定...

阿里云官方博客
28分钟前
3
0
make4.1降级 make-3.81、2错误

在编译 make-3.82 的时候出现如下错误提示 glob/glob.c:xxx: undefined reference to `__alloca'` 修改 /glob/glob.c // #if !defined __alloca && !defined __GNU_LIBRARY__ # ifdef __GNUC......

Domineering
30分钟前
2
0
Rainbond集群的安装和运维的原理

本文将解读Rainbond集群的安装和运维的原理,使用户基本了解Rainbond的安装机制和运维重点,便于用户搭建大型Rainbond集群。 1.Rainbond集群节点概述 1.1 节点分类 属性 类型 说明 manage 管...

好雨云帮
41分钟前
5
0
好程序员大数据学习路线分享UDF函数

1.为什么需要UDF? 1)、因为内部函数没法满足需求。 2)、hive它本身就是一个灵活框架,允许用自定义模块功能,如可以自定义UDF、serde、输入输出等。 2.UDF是什么? UDF:user difine fun...

好程序员官方
43分钟前
4
0
Groovy中 Base64 URL和文件名安全编码

Base64 URL和文件名安全编码 Groovy支持Base64编码很长一段时间。 从Groovy 2.5.0开始,我们还可以使用Base64 URL和Filename Safe编码来使用encodeBase64Url方法对字节数组进行编码。 结果是...

白石
47分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部