web-dev-qa-db-ja.com

Laravel)でのmariaDBJSONサポート

XAMPでjsonデータベースを作成しようとしていますが、phpmyAdminを使用しているときに、mariaDBを使用していることが示されましたが、xamp-control panel v3.2.2では実行中のmySQL on port 3306が表示されます。 Laravel 5.4フレームワークを使用してデータベースを作成しています。実行しようとしている移行は次のとおりです。

Schema::connection('newPortal')->create('pages', function (Blueprint $table){
    $table->increments('id');
    $table->string('title');
    $table->string('slug')->unique()->index();
    $table->json('styles')->nullable();
    $table->json('content')->nullable();
    $table->json('scripts')->nullable();
    $table->softDeletes();
    $table->timestamps();
});

これを実行しているときに、次のエラーが発生します。

SQLSTATE [42000]:構文エラーまたはアクセス違反:1064SQL構文にエラーがあります。 1行目の「jsonnull、content json null、scripts json null、deleted_at timestamp null」の近くで使用する正しい構文については、MariaDBサーバーのバージョンに対応するマニュアルを確認してください。 (SQL:テーブルの作成pagesid int unsigned not null auto_increment primary key、title varchar(191)not null、slug varchar(191)not null、styles json null、content json null、scripts json null、deleted_atタイムスタンプnull、created_atタイムスタンプnull、updated_atタイムスタンプnull)デフォルトの文字セットutf8mb4 collat​​e utf8mb4_unicode_ci)

Nullを保持していなくても、同じエラーがスローされます。 json形式のデータが欲しいので、サポートされているバージョンを確認しました。ドキュメントに従って、json形式のサポートはバージョンMariaDB 10.0.16.から開始され、10.1.21-MariaDBを使用しています。

これで私を助けてください。

6
Nitish Kumar

MariaDBには、バージョン10.2.7以降のJSONデータ型のエイリアスがあります

MariaDBJSONをLaravel with this package

7
ybr-nx

1064がデータ型「json」について文句を言ったことに注意してください。これは(まだ)MariaDBには実装されていません。

Dynamic Columns に近づくことができます。これには、少なくともJSON構文にそれらをフェッチする方法があります。

もう1つのこと(おそらくあなたが参照しているもの)は CONNECT JSONテーブルタイプを持つことができることです。 (タイプではありません。)

MySQL 5.7には、JSONと呼ばれるデータ型と、それを操作するための一連の関数があります。

4
Rick James

簡単な回避策を見つけました(本番環境には推奨されません)-

Mariadbバージョン10.1.32以下によると、mariadbはjsonデータ型をサポートしていないようです。バージョン10.2.7以降で使用できるかどうかはまだわかりません。

しかし、これを乗り越えるための簡単な回避策があります。

jsonデータ型をテキストに変更してから、移行を再実行してください。

https://user-images.githubusercontent.com/27993070/41234555-19c5d1d8-6dbf-11e8-9a4b-0644b03aecfc.png

ソース- https://github.com/laravel/framework/issues/13622

1
Techifylogic