• Skip to primary navigation
  • Skip to content
  • Skip to primary sidebar
  • Skip to footer
  • Skip to footer navigation
  • GitHub
  • Instagram
  • YouTube
Mateus Antunes

Mateus Antunes

  • Home
  • Blog
  • Contato

Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

março 5, 2019 by Mateus Leave a Comment

O Laravel a partir da versão a 5.4 passou a utilizar o conjunto de caracteres utf8mb4 por padrão. Esse conjunto de caracteres dá suporte ao armazenamento de emojis. Se você está utilizando uma versão do MySql superior a versão 5.77 ou uma versão do MariaDB superior a versão 10.2.2 você provavelmente não terá problemas.

Contudo, se estiver utilizando uma versão mais antiga você irá deparar com a seguinte mensagem de erro quando executar o comando para criar as migrations:

[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

Na documentação do Laravel  está descrito que você pode contornar esse erro configurando manualmente o tamanho da string padrão.

Para corrigir esse erro edite o arquivo AppServiceProvider.php localizado em
app/Providers/AppServiceProvider.php.

Inclua a declaração use Illuminate\Support\Facades\Schema. Além disso, dentro do método boot adicione Schema::defaultStringLength(191);.

Tudo bem, mas por que tem que ser 191 caracteres?

Se você acessar o arquivo localizado em vendor/laravel/framework/src/Illuminate/Database/Schema/Builder.php e buscar defaultStringLength encontrará que o tamanho padrão das strings é 255.

Sendo assim, defaultStringLength(191) significa que quando não houver o tamanho dos caracteres configurado em campos VARCHAR ou do tipo CHAR será assumido o tamanho padrão 191.

Se você usa utf8mb4, cada caractere de um campo CHAR ou VARCHAR reserva 4 bytes. Portanto, 191 caracteres vezes 4 bytes é igual 764 bytes. Então, o erro que acontece porque o tamanho máximo aceito é 767 bytes. Logo, 191 caracteres não vai estourar o limite máximo de 767 bytes.

Por fim, a classe irá ficar da seguinte forma:


<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

use Illuminate\Support\Facades\Schema;

class AppServiceProvider extends ServiceProvider

{

 public function boot()

 {

   Schema::defaultStringLength(191);

 }

}

Durante a tentativa de criar as migrations pode ter acontecido de criar alguma tabela no banco de dados. Então apague as tabelas no banco para depois efetuar algum comando.

Então agora tudo vai fica bem, você pode rodar suas migrations sem problemas. Sendo assim, se surgir qualquer dúvida sobre o assunto comente aqui em baixo. Por fim agradeço pela sua atenção, e até a próxima.

Reader Interactions

Deixe uma resposta Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Primary Sidebar

Posts recentes

  • O que é programar para uma interface e não para implementação?
  • Configurando uma classe customizada no Laravel
  • 4 extensões do Visual Estudio Code para integrar com a Unity
  • Configurando Jest no Angular
  • Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

Categorias

  • Angular
  • C#
  • Jest
  • Laravel
  • Padrões de Projeto
  • PHP
  • Servidor
  • Unity
  • Visual Estudio Code
  • Windows
  • Xampp

Arquivos

  • maio 2020
  • abril 2020
  • julho 2019
  • março 2019
  • janeiro 2019

Footer

Sobre mim

Criei esse blog para compartilhar vivências, erros, acertos e  todos os conhecimentos que eu adquiri .Sendo assim , se alguma coisa que eu compartilhar aqui fizer sentido para você e ajudar na sua jornada ficarei muito feliz.

Onde me encontrar

  • GitHub
  • Instagram
  • YouTube

Acompanhe as novidades

Inscreva-se abaixo para sempre receber novidades do blog.

Obrigado por inscrever-se.

Algo deu errado.

Copyright © 2019 · Mateus Antunes

  • Home
  • Blog
  • Contato