この表を見ると
varcharは文字数+1byteで
下の分を見ると、255文字以下は長さデータ1bytesって言ってるので、
この1bytesは多分長さデータなんでしょうね。
255を超えると2byteになるので、255文字だと256bytesで256文字だと258bytes使うってことですね。
In contrast to CHAR, VARCHAR values are stored as a 1-byte or 2-byte length prefix plus data. The length prefix indicates the number of bytes in the value. A column uses one length byte if values require no more than 255 bytes, two length bytes if values may require more than 255 bytes.
https://dev.mysql.com/doc/refman/8.0/en/char.html
CHARとは対照的に、VARCHARの値は1バイトまたは2バイトの長さプレフィックスとデータとして格納されます。長さプレフィックスは、値のバイト数を表します。カラムは、値が255バイト以下であれば1バイト、255バイト以上であれば2バイトの長さを使用します。
結果
255も256もそんな変わんない気がする
ぜんぶきれいに200とかにしとくのが綺麗でいいんじゃないかと思う。
追記
Specified key was too long; max key length is 767 bytes
こういうエラー出ることがありまして。
これが出たときに設定してたのが、varchar(200)
だったんですが。
あれ、結構短く設定してるのになと思ったんですが、
utf-8
は4バイト扱えるんですが、DBの場合はutf-8
は3バイトしか扱えないらしく。
4バイト扱えるutf8mb4
のが出てきた?みたいなことで、
200 × 4 で800になってしまい。767を超えてしまったと。。。
ふむ、実質190ぐらいが限界であとは、text型にした方がいいのかな。