とよぶ

歌いながらコード書いてます

TINYINT(1)で格納可能値の勘違いをしていた件

なぜかわからないけど、ずっと勘違いしていた。

今まで「TINYINT(1)」のような書き方をすると、()内に指定した桁の値だけ格納することができるものだと思っていた。

もちろん実態は違って、MySQLのドキュメント*1

SQL-92 標準の拡張として、MySQL では、前出の表に挙げているように、TINYINT、MEDIUMINT、および BIGINT 型もサポートしています。もう 1 つの拡張として、MySQL には、INT(4) のように、型の基本キーワードに続いて整数値の表示幅をかっこ内に指定できるオプションがあります。このオプションの表示幅の指定は、カラムに指定された幅より小さい幅を持つ値で表示の左側を埋める目的で使用されますが、そのカラムに格納できる値の範囲が制限されたり、そのカラムに指定された幅を超える幅を持つ値の桁数が制限されたりすることはありません。

「TINYINT(1)」は、TINYINTが格納できる大きさの整数を格納(1byte⇔-128~127)し、1桁だけ表示する。

あくまでこのオプションは整数値の表示幅を指定するオプション。

どこでこういう勘違いをしたのだろうか。。。