Обновлен до laravel 6.0 - рабочая миграция теперь не выполняется из-за метода "по умолчанию", возможно, проблема MariaDB

Мне было интересно, следует ли мне открыть проблему на Laravel github, но я не уверен, что это проблема Laravel, может быть, Eloquent или MariaDB.

Проблема, которую
я недавно обновил до Laravel 6.0. Когда я пытаюсь переустановить свой проект (с пустой базой данных) и выполняюphp artisan migrate, первая миграция не удалась. В файле содержится только одно создание таблицы:

/**
 * Run the migrations.
 *
 * @return void
 */
public function up()
{
    Schema::create('ltm_translations', function(Blueprint $table)
    {
        $table->increments('id');
        $table->integer('status')->default(0);
        $table->string('locale');
        $table->string('group');
        $table->string('key');
        $table->text('value')->nullable();
        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::drop('ltm_translations');
}

И ошибка в том, что генерируется неправильный SQL. В->default(0) во втором столбце переведено на status int not null default ('0').

Эти скобки заставляют мою базу данных генерировать исключение. Вот полный сгенерированный SQL (извлеченный из сообщения об ошибке).

create table `ltm_translations` (`id` int unsigned not null auto_increment primary key, `status` int not null default ('0'), `locale` varchar(255) not null,
  `group` varchar(255) not null, `key` varchar(255) not null, `value` text null, `created_at` timestamp null, `updated_at` timestamp null) default character set utf8 collate 'utf8_bin' engine = innodb`

Если я скопирую, вставьте этот запрос и замените ('0') по 0 оно работает.
(0) а также ('0')терпит неудачу.

Официальная документация, сказала мне, что это действительный синтаксис с выражениями и такими, но в нем упоминается что - то около 10,2 версии.

Моя версия MariaDB отвечает:

mariadb --version
mariadb  Ver 15.1 Distrib 10.1.40-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Вопросы
Является ли моя версия MariaDB проблемой?
Могу ли я заставить Eloquent генерировать синтаксис, совместимый с моей версией MariaDB, или мне придется обновить mariaDB до 10.2+?

Поскольку это официально не поддерживается производственной версией ОС (Ubuntu 18.04), это было бы ужасной проблемой, любое решение, совместимое с производственным сервером, приветствуется.

Спасибо за ваше время!

1 ответ

Решение

Работает с laravel 6.0.3

Проблема исправлена ​​в laravel 6.0.3.

Рабочие комбинации до 6.0.3

  • Laravel 5.8 mysql 5.7.27 работает
  • Laravel 6.0.2 mysql 5.7.27 не работает
  • Laravel 6.0.2 mysql 8.0.13 работает

Пока это не будет исправлено, похоже, вы можете либо понизить версию Laravel до версии 5.8, либо обновить mysql до версии 8.

Обновление до mysql 8 на машине разработки с помощью docker

Если вы решите перейти на mysql 8.0.13, обязательно установите default-authentication-plugin=mysql_native_password. Это AFAIK проблема php, а не проблема laravel.

Для справки:

$ ls -l
drwxrwxr-x 7 thomas thomas 4096 Sep 11 10:28 data
-rw-rw-r-- 1 thomas thomas   61 Sep 11 10:11 php-compatible-password.cnf
-rwxrw-r-- 1 thomas thomas  316 Sep 11 10:14 start.sh

php-совместимый-пароль.cnf:

[mysqld]
default-authentication-plugin=mysql_native_password

start.sh:

#!/usr/bin/env bash

docker run --rm -v "$PWD/php-compatible-password.cnf":/etc/mysql/conf.d/php-compatible-password.cnf -v "$PWD/data":/var/lib/mysql --user 1000:1000 --name mydb-mysql8 -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=homestead -e MYSQL_USER=homestead -e MYSQL_PASSWORD=secret -d mysql:8

laravel.env:

…
DB_CONNECTION=mysql
DB_HOST=172.17.0.2
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
…

Где 172.17.0.2 - результат

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mydb-mysql8
Другие вопросы по тегам