Laravel, MySQL - int의 크기가 지정된 경우에도 column_type이 "int (11)"로 설정됩니다.
MySQL 버전: 5.7
라라벨 버전 : 8.16.1
PHP 버전 : 7.4.7
Laravel에서 마이그레이션 파일에 테이블 열을 추가할 때 int 크기를 이렇게 지정할 수 있습니다.
Schema::table('projects', function (Blueprint $table) {
$table->integer('category_code')->length(3);
});
그런데 실제 생성된 MySQL 스키마를 보면 column_type이 "int(11)"이다.
무슨 일이야? 내가 실수 했나요?
그래서 찾아보니 이런 내용이 있더군요.
https://stackoverflow.com/questions/25772759/schema-builder-length-of-an-integer
If you're using MySQL, you can't specify the length of an integer column.
You can only choose between one of the available integer types, described at http://dev.mysql.com/doc/refman/5.1/en/integer-types.html
요컨대 "MySQL을 사용하는 경우 길이를 지정할 수 없습니다".
이는 일부 MySQL 유형의 경우 크기가 이미 미리 결정되어 원하는 대로 변경할 수 없음을 의미합니다.
테이블은 여기 있습니다.
유형
스토리지(바이트)
서명된 최소값
서명되지 않은 최소값
서명된 최대값
부호 없는 최대값
TINYINT
1
-128
0
127
255
스몰린트
2
-32768
0
32767
65535
중간
삼
-8388608
0
8388607
16777215
지능
4
-2147483648
0
2147483647
4294967295
비긴트
8
-263
0
263-1
264-1
결론
"MySQL에서 int를 사용하면 항상 "int(11)"이 되지만, MySQL이 작동하는 방식일 뿐입니다.
그렇다면 tinyint는 어떻습니까?
찾아보니 이런게 있네요.
Database: Migrations - Laravel - The PHP Framework For Web Artisans
The following column types can be modified: bigInteger, binary, boolean, date, dateTime, dateTimeTz, decimal, integer, json, longText, mediumText, smallInteger, string, text, time, unsignedBigInteger, unsignedInteger, unsignedSmallInteger, and uuid. To modify a timestamp column type a Doctrine type must be registered.
요컨대, 그것은 말한다
"int에서 tinyint로 변경할 수 없습니다."
(그 반대도 가능)
반대로 할 수 없다면 롤백이 제대로 되지 않는 것이므로 피해야 합니다.
사실 나도 불필요한 오류에 시달렸다.
따라서 int 또는 bigint를 사용하면 기본 길이로 사용해도 됩니다.
(오히려 다른 방법은 없습니다.)
메모
int에서 tinyint로 변경하려면 Laravel 구문 없이도 가능하지만 테이블 변경을 사용합니다.
예를 들어:
DB::statement("alter table projects modify category_code tinyint;");
Reference
이 문제에 관하여(Laravel, MySQL - int의 크기가 지정된 경우에도 column_type이 "int (11)"로 설정됩니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kakisoft/laravel-mysql-columntype-is-set-to-int-11-even-though-the-size-of-int-was-specified-59pj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)