Обновлен до 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