programing

Larabel에서의 MariaDB JSON 지원

shortcode 2022. 10. 6. 22:04
반응형

Larabel에서의 MariaDB JSON 지원

XAMP에서 json 데이터베이스를 작성하려고 하는데, phpmyAdmin을 사용하는 동안 mariaDB를 사용하고 있다고 표시되었습니다.xamp-control panel v3.2.2실행 중임을 나타냅니다.mySQL on port 3306데이터베이스를 작성하기 위해 Larabel 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 ]:구문 오류 또는 액세스 위반: 1064 SQL 구문에 오류가 있습니다. 사용하시는 MariaDB 서버 버전에 대응하는 매뉴얼에서 json null 부근에서 사용할 올바른 구문을 확인하십시오.contentjson 특수한 순서,scriptsjson 특수한 순서,deleted_at행 1의 타임스탬프 null' (SQL: 테이블 생성)pages(idint unsigned null auto_display 기본 키가 아닙니다.titlevarchar(191)는 늘이 아닙니다.slugvarchar(191)는 늘이 아닙니다.stylesjson 특수한 순서,contentjson 특수한 순서,scriptsjson 특수한 순서,deleted_at타임스탬프 null,created_at타임스탬프 null,updated_attimestamp null) 기본 문자 집합 utf8mb4 collate utf8mb4_ci)

null을 유지하지 않아도 동일한 오류가 발생합니다.json 포맷 데이터를 원하는 경우 지원되는 버전을 확인하고 매뉴얼에 따라 json 포맷 지원이 버전부터 시작되었습니다.MariaDB 10.0.16.그리고 나는 사용하고 있다.10.1.21-MariaDB

나 좀 도와줘.

부터MariaDB버전 10.2.7,JSONdata-type은 에일리어스입니다LONGTEXT.

에 문제가 있는 경우JSONMariaDB의 data-type을 단순히 변경하기만 하면 됩니다.LONGTEXT. ;-)

또는패키지로 MariaDB JSON을 Larabel에 추가합니다.

1064는 데이터형 "json"에 대해 불만을 제기했습니다.이는 MariaDB에서는 아직 구현되지 않았습니다.

동적 열을 JSON 구문으로 가져올 수 있는 방법이 있는 동적 열을 사용할 수 있습니다.

또 하나(아마도 당신이 언급하고 있는 것)는 JSON 테이블 타입을 가질 수 있다는 것입니다.(컬럼 타입이 아닙니다).

MySQL 5.7에는 다음과 같은 데이터 유형이 있습니다.JSON, 그리고 그러한 조작을 위한 많은 기능들이 있습니다.

간단한 회피책 확인(실가동에는 권장되지 않음) -

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

composer를 사용하여 다음 명령을 실행하여 MariaDB JSON 지원을 Larabel에 추가합니다.

composer require ybr-nx/laravel-mariadb

Larvel 5.3과 5.4를 사용하고 있는 경우는, 다음의 2개의 항목을 실행합니다.

  • MariaDBserviceProvider에 합니다.config/app.php하다
'providers' => [
    // other exist providers
    YbrNX\MariaDB\MariaDBServiceProvider::class,
]
  • 데이터베이스 구성에서 기본 연결을 mariadb로 설정합니다.
'defaultconnection' => [
    'driver' => 'mariadb',

패키지 추가가 완료되면 기능을 사용할 수 있습니다.

이행 시:

$table->json('field') //CHECK (JSON_VALID(field))
$table->json('field')->nullable() //CHECK (field IS NULL OR JSON_VALID(field))

쿼리 작성기의 경우:

$query->where('somejson->something->somethingelse', 2)
DB::table('sometable')->select('sometable.somedata', 'sometable.somejson->somedata as somejsondata')

또한 JSON_SET()는 MySQL 5.7과 마찬가지로 MariaDB에서 동작합니다.

DB::table('sometable')->where('somejson->somedata', $id)->update(['somejson->otherdata' => 'newvalue']);

주 1: MariaDB에는 버전 10.2.7 이후 JSON 데이터 유형의 별칭이 있습니다.

주 2: MariaDB < 10.2.8 JSON_EXTRACT() 동작 함수에 버그가 있습니다.MariaDB 10.2.8로 고정되어 있습니다.

에서 취득한

언급URL : https://stackoverflow.com/questions/42425667/mariadb-json-support-in-laravel

반응형