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 부근에서 사용할 올바른 구문을 확인하십시오.
content
json 특수한 순서,scripts
json 특수한 순서,deleted_at
행 1의 타임스탬프 null' (SQL: 테이블 생성)pages
(id
int unsigned null auto_display 기본 키가 아닙니다.title
varchar(191)는 늘이 아닙니다.slug
varchar(191)는 늘이 아닙니다.styles
json 특수한 순서,content
json 특수한 순서,scripts
json 특수한 순서,deleted_at
타임스탬프 null,created_at
타임스탬프 null,updated_at
timestamp null) 기본 문자 집합 utf8mb4 collate utf8mb4_ci)
null을 유지하지 않아도 동일한 오류가 발생합니다.json 포맷 데이터를 원하는 경우 지원되는 버전을 확인하고 매뉴얼에 따라 json 포맷 지원이 버전부터 시작되었습니다.MariaDB 10.0.16.
그리고 나는 사용하고 있다.10.1.21-MariaDB
나 좀 도와줘.
부터MariaDB
버전 10.2.7,JSON
data-type은 에일리어스입니다LONGTEXT
.
에 문제가 있는 경우JSON
MariaDB의 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
'programing' 카테고리의 다른 글
C#의 DateTime을 yyy-MM-dd 형식으로 변환하여 MySql DateTime 필드에 저장합니다. (0) | 2022.10.06 |
---|---|
MySQL datetime 필드 및 여름 시간 - "추가" 시간은 어떻게 참조합니까? (0) | 2022.10.06 |
MySQL에서 한 행을 복사하여 같은 테이블에 삽입할 수 있습니까? (0) | 2022.10.06 |
연결 배열에 항목 추가 (0) | 2022.10.05 |
웹 팩의 "public Path"는 무엇을 합니까? (0) | 2022.10.05 |