MySQLで0、1、NULL値を格納するのに最適なデータ型は?
MySQLで0、1、NULLという3種類の値を格納したい場合、最適なデータ型は TINYINT(1) UNSIGNED NULL です。TINYINTはわずか1バイトで済むため省スペースであり、フラグや真偽値のような扱いにも向いています。
カラム定義の構文
yourColumnName TINYINT(1) UNSIGNED NULL;
UNSIGNEDを指定することで負の値を排除し、NULLを許容することで「未設定」の状態も表現できます。
テーブルを作成して動作を確認する
それでは、実際にテーブルを作成して構文を確認してみましょう。テーブル作成のクエリは以下の通りです。
mysql> create table StoreValue0and1orNULLDemo -> ( -> isDigit TINYINT(1) UNSIGNED NULL -> ); Query OK, 0 rows affected (0.63 sec)
0、1、NULLのレコードを挿入する
次に、INSERTコマンドを使ってテーブルに0、1、NULLの3つのレコードを挿入します。
mysql> insert into StoreValue0and1orNULLDemo values(0); Query OK, 1 row affected (0.18 sec) mysql> insert into StoreValue0and1orNULLDemo values(1); Query OK, 1 row affected (0.18 sec) mysql> insert into StoreValue0and1orNULLDemo values(NULL); Query OK, 1 row affected (0.11 sec)
SELECT文で登録内容を確認する
SELECT文を実行して、テーブル内のすべてのレコードを表示します。
mysql> select *from StoreValue0and1orNULLDemo;
実行結果は以下の通りです。0、1、NULLが正しく格納されていることが確認できます。
+---------+ | isDigit | +---------+ | 0 | | 1 | | NULL | +---------+ 3 rows in set (0.00 sec)
まとめ
0と1、さらにNULLを扱いたい場合は、TINYINT(1) UNSIGNED NULLを使うのがベストプラクティスです。ストレージを最小限に抑えつつ、真偽値に加えて「値なし」の状態まで柔軟に表現できるため、多くの場面で活用できます。
-
MySQLで列エイリアスを特定のデータ型として扱う方法(CASTとCASEの活用)
MySQLでは、符号なし整数型(UNSIGNED)の列をそのままSELECTすると、負の値を扱えないという制約があります。そこで、CASEステートメントとCAST関数を組み合わせることで、列エイリアスの結果を特定のデータ型(ここではSIGNED=符号付き整数)に強制的に変換する方法を紹介します。1. サンプルテーブルの作成まず、テスト用のテーブルを作成します。「Value」列はUNSIGNED型、「Status」列はTINYINT(1)型とします。mysql> create table DemoTable1505 -> ( &
-
MySQLでNULL値を1として表示・更新する方法
MySQLでは、テーブル内のNULL値を別の値(たとえば「1」)に置き換えて扱いたい場面があります。この記事では、IFNULL関数とUPDATE文を組み合わせて、NULL値を1に変換する具体的な手順をサンプルコード付きで解説します。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成します。 mysql> create table DemoTable1963 ( Counter int ); Query OK, 0 rows affected (0.00 sec) 2. レコードを挿入する INSERT文を使って、NULLを含む複数のレコードを