Syntax error or access violation 1059 identifier name is too long

Search

December 29, 2015
·
2 mins, 246 words

Migrations are a great way of building database schema, but sometimes it’s harder to deal with more than just columns. One of more interesting things are indexes. In particular, I had a problem of auto-assigning a name to unique index, which appeared to be too long. What to do with it?

A specific example — let’s say you want to set up a unique index on four columns:

$table->unique(['product_id', 'company_id', 'price', 'delivery_hours']);

With that you can run into this error:

SQLSTATE[42000]: Syntax error or access violation:
1059 Identifier name
'prices_history_product_id_company_id_price_delivery_hours_unique'
is too long

The thing is that Laravel is trying to automatically assign a name to the index, and MySQL has a limit here: 64 characters for identifier name.

Solution is to specify your own name for the structure. If you read official laravel documentation, it’s not mentioned, the examples are pretty simple:

1228_laraveldaily_unique

But if you dig deeper, then the exact function unique() is defined like this:

unique(string|array $columns, string $name = null)

Which means that you can specify your own name for the index.

$table->unique(['product_id', 'company_id', 'price', 'delivery_hours'],
  'prices_history_index_unique');

Notice: Just make sure it’s not longer than 64 characters and is not among MySQL reserved words.

Notice 2: Same rule applies to other index identifiers — functions primary() or just index() -you can specify the names as well, instead of allowing Laravel to auto-assign the names.

Like our articles?

Become a Premium Member for $129/year or $29/month

Recent Premium Tutorials

  • October 06, 2022
    ·
    19 mins, 3635 words
    ·

    premium

    React.js + Laravel API CRUD: Step-by-Step Practical Example

  • October 20, 2022
    ·
    25 mins, 4982 words
    ·

    premium

    Laravel Breeze with User Areas: Student, Teacher, Admin

  • November 17, 2022
    ·
    12 mins, 2275 words
    ·

    premium

    CRUDdy By Design by Adam Wathan: Summary, Examples, Opinions

  • December 13, 2022
    ·
    11 mins, 2111 words
    ·

    premium

    Laravel Filament: 12 Best Plugins with Demos

  • January 12, 2023
    ·
    21 mins, 4161 words
    ·

    premium

    Laravel SaaS with Jetstream in 6 Steps: Detailed Guide

  • January 09, 2023
    ·
    8 mins, 1521 words
    ·

    premium

    Laravel «Update or Create» From CSV: 5 Eloquent Performance Optimizations

ProvidePerfect

I am trying to create a pivot table with the rainlab builder plugin for a $belongsToMany relation of a company id to a category id but getting following error and have found no solution for it yet

SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'namespaceauthor_directory_company_category_pivot_company_id_category_id_primary' is too long (SQL: alter table `namespaceauthor_directory_company_category_pivot` add primary key `namespaceauthor_directory_company_category_pivot_company_id_category_id_primary`(`company_id`, `category_id`))
public function up()
{
    Schema::create('namespaceauthor_directory_company_category_pivot', function($table)
    {
        $table->engine = 'InnoDB';
        $table->integer('company_id');
        $table->integer('category_id');
        $table->primary(['company_id','category_id']);
    });
}

public function down()
{
    Schema::dropIfExists('namespaceauthor_directory_company_category_pivot');
}

Thank you in advance for any help

Yakedo

Yakedo

Hi, I’m sorry to post on such an old topic, but I thought my answer could be useful for others who might stumble accross this issue :

The cause of your issue lies in th Builder plugin, which is not configured to set custom names to compound indexes, and will simply generate a concatenation of the table names and columns.
Basically, if you don’t specify an index name manually, you will end up with an incredibly long one, which will exceed the character size limit.

I you can’t change your table’s name, I would advise you not to use the Builder plugin and just create your own migration for this one, but don’t forget to specify the index name as the second argument of your primary() index, as mentionned in the October CMS documentation.

You cannot edit posts or make replies: the forum has moved to talk.octobercms.com.

Я получаю ошибку MySQL при создании таблицы:

SQLSTATE[42000]: Syntax error or access violation: 1059 Identifier name 'FK_SALES_FLAT_CREDITMEMO_GRID_ARCHIVE_STORE_ID_CORE_STORE_STORE_ID' is too long

Как увеличить размер имени идентификатора по умолчанию или как я могу решить это в противном случае?

30 окт. 2012, в 07:10

Поделиться

Источник

2 ответа

Предоставьте свое собственное имя выстрела к ключу.

$table->unique(['product_id', 'company_id', 'price', 'delivery_hours'], 'prices_history_index_unique');

Muzammil Hussain
27 июль 2018, в 09:34

Поделиться

Ещё вопросы

  • 0Ошибка SQL на ключевое слово «ссылки»
  • 1Стремительное выполнение в пользовательских оценках тензорного потока
  • 0использовать requirejs частично и иногда включать javascript вручную?
  • 1Общее время воспроизведения
  • 0PHP находит экстент общей подстроки от начала
  • 1Изменение ImageView по нажатию кнопки
  • 0C ++ Struct узел, как вставить строку и удалить конкретный узел?
  • 1Выполнение расчета со всеми предыдущими значениями в пандах
  • 1Android AudioRecord фильтр диапазона частот
  • 0Изменение цвета элемента элемента и последнего элемента в ионном списке
  • 1Есть ли стандартный ImageViewer на Android?
  • 0Как правильно сделать столбцы в адаптивном дизайне?
  • 0MySQL временная таблица в подзапросе
  • 1Почему сетка не следовала за арматурой в режиме редактирования, как получить координаты точек на сетке, размеченной арматурой?
  • 0отправить целочисленное значение переменной из JavaScript в файл PHP
  • 0Калькулятор парсера бизонов
  • 1MediaPlayer на Android играет только часть моей песни :(
  • 0Информация о пользователе в модальной форме перед отправкой формы в Yii
  • 1Получение местоположения сетки во время выполнения в codebehind
  • 0Как создать динамический список выбора из строки, разделенной запятыми?
  • 0Подход для проверки всех текстовых полей с использованием Jquery validate
  • 1Установка элемента управления в шаблоне данных как CommandTarget для кнопки вне шаблона
  • 1Как преобразовать dataframe в многослойный Json в Python?
  • 0Как выровнять кнопки (в разных формах) по горизонтали в IE7
  • 1Реализация пользовательского набора данных с помощью PyTorch
  • 1Проблема с созданием класса C # для десериализации xml (c # xml) XmlSerializer
  • 0Как выполнить несколько запросов в sqlapi ++ с оракулом
  • 1Обновление представлений вложенных действий TabActivity из фонового процесса
  • 1Netbeans 8 + maven + OpenJPA развернут на TomEE — ошибка улучшения
  • 1Python рабочая вычитание в функции
  • 0Запрос не выполнен У вас есть ошибка в синтаксисе SQL; рядом с «DESC» в строке 1
  • 1Как я могу написать регулярное выражение в Python, которое останавливается на первом периоде в строке, которая имеет непредсказуемые символы?
  • 1Javascript дает неправильные числовые ответы во время проверки данных
  • 1Как добавить элементы из строки, добавленной из консоли, в список в Java
  • 0Выбор конкретного тега в библиотеке Jquery
  • 1Получить уникальный идентификатор мобильного телефона из JavaScript
  • 1Почему SMTP-почта не удаляется, когда это делает клиент?
  • 1C # Access, Как выполнить запрос из представления в доступе
  • 0Создайте два разных пути расположения на одной кнопке (AngularJS)
  • 1Печать оператора массива
  • 0Проблемы с использованием cURL из PHP для очистки исходного кода
  • 1JavaScript куча нехватки памяти в angular 2
  • 0предотвратить сброс сброса php после отправки
  • 0Использование плагина readmore.js с динамически создаваемым тегом div
  • 0Переключение области отображения Javascript
  • 1Воспроизведение сырого PCM с помощью NAudio (выводит шум, но в Audacity открывается нормально)
  • 1Предел глубины рекурсии для программы Фибоначчи на Python
  • 1Когда совпадают обе половины группы регулярных выражений OR, будет ли определено, какой из них будет выбран?
  • 0Я не могу отправить данные формы в базу данных MySQL
  • 1Инициализируйте значение var в null для строго типизированного

Сообщество Overcoder

Понравилась статья? Поделить с друзьями:
  • Syntax error or access violation 1055
  • Syntax error operator priority clash
  • Syntax error on tokens delete these tokens
  • Syntax error on token void record expected
  • Syntax error on token s misplaced construct s java