アプリ開発備忘録

PlayStationMobile、Android、UWPの開発備忘録

【MySQL】tinyint(1)はBool値だが、0,1以外も入れられてしまう

tinyint(1)

tinyint(1) は明確に公式でBOOLと書いてあります。

BOOL, BOOLEAN | TINYINT | See TINYINT, above as these are aliases for TINYINT(1), currently.

https://dev.mysql.com/doc/connectors/en/connector-j-reference-type-conversions.html

数値型の属性

しかしこちらのドキュメントにはこうも書いてあります。

表示幅は、カラムに格納できない値の範囲を制約しません。

https://dev.mysql.com/doc/refman/5.6/ja/numeric-type-attributes.html

unsignedと違って型に数値を与えても制約を行うことができません。なので0,1以外にも数値を入れられてしまいます。

困る場合

SQLを直接叩く場合などは困りません。
しかし、ライブラリを使用する場合は tinyint(1) はBOOLが前提条件となっている場合があります。
JDBCもそうで、 tinyInt1isBit というオプションがあります。デフォルトでtrueとなっているので数値として扱う場合は false を設定します。
https://dev.mysql.com/doc/connectors/en/connector-j-reference-configuration-properties.html