CakePHP Migrations limit 옵션 정보
CakePHP 의 슬랙 채널 에서 화제 에 오르고 있었으므로 앞으로 공개합니다.
세 줄
발단
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`gender` tinyint(4) NOT NULL DEFAULT '0',
`created` datetime,
`modified` datetime,
PRIMARY KEY (`id`)
);
위의 schema 로
bake migration_snapshot
한 마이그레이션 파일을 실행하면(자), 이하의 예외가 던져져 마이그레이션을 실행할 수 없다.Exception: An invalid column type "tinyinteger"was specified for column "gender". in [/path/to/vendor/robmorgan/phinx/src/Phinx/Db/Table.php, line 351]
우선 대응 방법
해당 열의 type을 변경하고 limit에 Phinx 옵션을 설정합니다.
htp // // cs. p 힌트 x. 오 rg / 엔 / 아 st / 미g 라치온 s. html # ぃみ t 오 p 치 온 - an d mysql
- ->addColumn('gender', 'tinyinteger', [
+ ->addColumn('gender', 'integer', [
'default' => '0',
- 'limit' => 4,
+ 'limit' => Phinx\Db\Adapter\MysqlAdapter::INT_TINY,
'null' => false,
])
또는
<?php
use Migrations\AbstractMigration;
+use Phinx\Db\Adapter\MysqlAdapter;
- ->addColumn('gender', 'tinyinteger', [
+ ->addColumn('gender', 'integer', [
'default' => '0',
- 'limit' => 4,
+ 'limit' => MysqlAdapter::INT_TINY,
'null' => false,
])
다른 타입은?
다른 type에 대해서도 상황을 확인.
원래 유형
결과
작성된 type
TINYBLOB
△
BINARY(255)
BLOB
△
BINARY(255)
MEDIUMBLOB
error
LONGBLOB
error
TINYTEXT
○
TINYTEXT
TEXT
○
TEXT
MEDIUMTEXT
○
MEDIUMTEXT
LONGTEXT
○
LONGTEXT
TINYINT
error
SMALLINT
error
MEDIUMINT
△
INT(9)
INT
○
INT
BIGINT
○
BIGINT
blob은 binary로 취급됩니다. MEDIUMBLOB, LOGNBLOB의 경우 다음 오류가 발생합니다.
SQLSTATE[42000]: Syntax error or access violation: 1074 Column length too big for column 'blob_long' (max = 255); use BLOB or TEXT instead
대응
- ->addColumn('blob_long', 'binary', [
+ ->addColumn('blob_long', 'blob', [
'default' => null,
- 'limit' => 4294967295,
+ 'limit' => Phinx\Db\Adapter\MysqlAdapter::BLOB_LONG,
'null' => true,
PostgreSQL의 경우
SAMLLINT 는
Exception: An invalid column type
가 던진다.htp : // cs. p 힌트 x. 오 rg / 엔 / 아 st / 미g 라치온 s. html # ぃみ t 오 p 치 온 - an d po stg re sql
- ->addColumn('gender', 'smallinteger', [
+ ->addColumn('gender', 'integer', [
'default' => null,
- 'limit' => 5,
+ 'limit' => Phinx\Db\Adapter\PostgresAdapter::INT_SMALL,
'null' => false,
BIGINT는 구문 오류 ...
Exception: SQLSTATE[42601]: Syntax error: 7 ERROR: syntax error at or near "("
LINE 1: ...users"("id"BIGSERIAL NOT NULL, "big_int"BIGINT (20) NOT N...
대응
->addColumn('big_int', 'biginteger', [
'default' => null,
- 'limit' => 20,
+ 'limit' => null,
'null' => false,
])
요약
어쩌면 CakePHP 본체의 대응이 필요합니다 ...
환경
내일은 @ 케이 스케 후나츠씨입니다.
Reference
이 문제에 관하여(CakePHP Migrations limit 옵션 정보), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/oppara/items/a903e174136049aa9137텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)