Symfony 4 SQLSTATE [42000] Указанный ключ слишком длинный

Я пытаюсь создать базу данных из Entity в Symfony 4. Однако результат:

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

Я знаю, что это потому, что он пытается использовать кодировку utf8mb4 и сопоставление utf8mb4_unicode_ci. Я попытался заменить свой файл doctrine.yaml на utf8 и utf8_unicode_ci, а также:

@ORM\Table(name = "users", options = {"collate" = "utf8_unicode_ci", "charset" = "utf8", "engine" = "MyISAM"})

Но все еще пытается использовать utf88mb4. Как я могу заставить его использовать utf8?

Не используйте MyISAM. См. 767 обходных путей здесь.

Rick James 10.06.2018 18:34
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
8
1
6 489
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий

Хорошо, я нашел ответ, так что в основном у меня было много файлов миграции, и php постоянно пытался создать базу данных со старой конфигурацией. Чтобы правильно создать его, я удалил каталог Migrations и использовал

php bin/console doctrine:cache:clear-metadata.

Это помогло, теперь создатель использовал новую конфигурацию.

К сожалению, это не полный ответ. У меня такая же проблема с кодом SQL, сгенерированным миграциями Symfony, но я запускаю код непосредственно в базе данных. Я думаю, что есть основная проблема с Doctrine.

Acyra 15.07.2019 11:18

Это решение для меня:

Измените 255 на 191 в VARCHAR - вы потеряете любые значения длиннее 191 символа (маловероятно?);

Справка

Привет, у меня такая же ошибка: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1071 Указанный ключ слишком длинный; максимальная длина ключа 767 байт

Исправляю изменением длина до 191 вот так: @ORM \ Column (type = "строка", длина = 191, уникальный = true)

ошибка: В PDOConnection.php строка 88: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1071 Указанный ключ был t oo долго; максимальная длина ключа 767 байт

фреймворк: Symfony 4.4

Решение:

Обновите файл config / doctrine.yaml

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'
        server_version : '5.0'
        charset: utf8
        default_table_options:
            charset: utf8
            collate: utf8_unicode_ci

Мы обновили server_version до mariadb-10.1.34 и charset до utf8mb4 в config / doctrine.yaml. После обновления мы должны выполнить следующую команду:

php bin/console doctrine:schema:drop
php bin/console doctrine:schema:create
php bin/console doctrine:schema:validate

Вот "config / doctrine.yaml" для вашей справки.

doctrine:
  dbal:
    url: "%env(resolve:DATABASE_URL)%"
    server_version: "mariadb-10.1.34"
    charset: utf8
    default_table_options:
      charset: utf8
      collate: utf8_unicode_ci
  orm:
    auto_generate_proxy_classes: true
    naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
    auto_mapping: true
    mappings:
      App:
        is_bundle: false
        type: annotation
        dir: "%kernel.project_dir%/src/Entity"
        prefix: 'App\Entity'
        alias: App

Ссылка: https://github.com/symfony/symfony/issues/27166#issuecomment-524041055

Другие вопросы по теме