MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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など)が有効な環境では、このような不正な値の挿入はエラーとなり処理が拒否される場合がある点にも注意しましょう。

  1. 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

  2. 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