MySQLのNOT NULL列に空文字列を挿入すると、なぜ0として表示されるのか?
空文字列挿入時に0が表示される理由
NOT NULL制約が設定されたMySQLの列に空文字列('')を挿入した際に、結果が0として表示されることがあります。その理由は、空文字列の挿入はNULLを挿入しているわけではなく、「何らかの値」を挿入しているとみなされるためです。
MySQLでは、数値型のコンテキストにおいて空文字列は整数の0(ゼロ)にマッピングされます。言い換えれば、空文字列を挿入することは、整数表現として「INT 0」に相当する値をMySQLに渡していることになります。NULLは「値が存在しない」ことを意味しますが、空文字列はあくまで「長さゼロの文字列」という一つの値である点がポイントです。
実際の動作を確認する例
以下の例では、idカラムをint型かつNOT NULLとして定義したテーブルに対し、空文字列を挿入しています。MySQLによって自動的に0へと変換されているのが分かります。
mysql> create table test(id int NOT NULL, Name Varchar(10));
Query OK, 0 rows affected (0.19 sec)
mysql> Insert into test(id, name) values('1', 'Gaurav'),('0','Rahul'),('&','Aarav');
Query OK, 3 rows affected, 1 warning (0.08 sec)
Records: 3 Duplicates: 0 Warnings: 1
mysql> Select * from test;
+----+--------+
| id | Name |
+----+--------+
| 1 | Gaurav |
| 0 | Rahul |
| 0 | Aarav |
+----+--------+
3 rows in set (0.00 sec)補足:警告メッセージについて
上記のINSERT文では「1 warning」と表示されています。これは、空文字列''をint型の列に挿入しようとしたため、MySQLが暗黙的に型変換を行い0に置き換えたことを示す警告です。厳密なSQLモード(STRICT_TRANS_TABLESなど)が有効な環境では、このような不正な値の挿入はエラーとなり処理が拒否される場合がある点にも注意しましょう。
-
MySQLのNOT NULL制約とは?空にできない列の定義方法とエラーの挙動を解説
MySQLでは、列にNULL(空の値)を許可したくない場合、テーブル定義時にNOT NULL制約を指定します。NOT NULLが設定された列にNULLを挿入しようとすると、MySQLはエラーを返し、データの登録を拒否します。NOT NULL制約を持つテーブルの作成まず、Id列とLastName列をNOT NULLとして指定したテーブルを作成してみましょう。mysql> create table DemoTable1895 ( Id int NOT NULL, FirstName varchar(20), LastName varchar(20) NOT N
-
MySQLの既存のカラムにNOT NULL制約を設定する方法
MySQLですでに存在するカラムにNOT NULL制約を追加するには、ALTER TABLE文を使用します。この記事では、実際のSQL例を使いながら、NOT NULL制約の設定方法とその動作確認の手順をわかりやすく解説します。 1. テーブルの作成 まず、検証用のサンプルテーブルを作成します。 mysql> create table DemoTable1949 ( UserId int, UserName varchar(20) ); Query OK, 0 rows affected (0.00 sec) この時点では、UserNameカラムにはNUL