MySQL のバージョン : 5.7
Laravel のバージョン: 8.16.1
PHP のバージョン: 7.4.7
Laravel で migration ファイルにてテーブルのカラムを追加する時、こんな感じで 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 の一部の型は、型によって既にサイズが確定しており、サイズを好き勝手に変える事は出来ないとの事。
その表が、こちら。
https://dev.mysql.com/doc/refman/8.0/en/integer-types.html
結論
「 MySQL で int を使うなら必ず『 int(11) 』になるけど、MySQL の仕様上、仕方ないから勘弁してね 」
じゃ、tinyint はどうなの?
という事で調べてみたら、こんなのがあった。
Laravelにてテーブルの既存カラムをtinyint型に変更できない問題
要は、
「int → tinyint に変更できない」
との事。(逆なら可)
逆が出来ないという事は、rollback が正常に動かないという事なので、採用は慎重に、というか見送った方がいいだろ。
実際、自分も余計なエラーに悩まされたし。
という訳で、int、bigint を使う場合は、デフォルトの長さでOK。
(というかそれ以外できない)