TEDIA会員に登録したメールアドレスとパスワードを入力してください

メールアドレス:

     パスワード:


パスワードを忘れた方はパスワードの確認を行ってください。

TEDIA会員へのご登録がお済みで無い方はこちらで登録ができます


>> テクノロジーポータル TEDIA トップページへ戻る <<

Think IT Software Developer's Think IT Find-IT 失敗しないソフト選び Find-IT TEDIA テクノロジーポータル TEDIA インストールマニアックス2008 インストールマニアックス2008

TEDIA SponsorsOpen Source Web Development Tutorials - Dev Shed

NULLと空文字列
(2009/02/06公開)

MySQLでNULLを扱う

 もっとよく分かるようにNULL値を入力してみよう。そのためのクエリは次のようになる。


// before inserting a value alter the column to accept null values 
ALTER TABLE `example` CHANGE `name` `name` VARCHAR( 20 ) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL

$query = "INSERT INTO `example` (`id`, `name` ) values ('', null) " ;


mysql> select * from example;
+----+------+
| id | name |
+----+------+
| 2  |      |
| 3  |      |
| 4  | NULL |
+----+------+
3 rows in set (0.00 sec)



 ではここで、NULL値を持つすべての組(タプル)を選択するとしよう。その場合のクエリは次のとおり。


Select * from example where name is null ;

ID = 4が返される。
mysql> Select * from example where name is null ;
+----+------+
| id | name |
+----+------+
| 4  | NULL |
+----+------+
1 row in set (0.03 sec)

Select * from example where name = '' ;

ID=1,2が返される。

mysql> Select * from example where name = '' ;
+----+------+
| id | name |
+----+------+
| 2  |      |
| 3  |      |
+----+------+
2 rows in set (0.00 sec)



 実際には、空っぽである3つすべての値を得たいものだろう。そのためには、次のようなクエリを使う。


Select * from example where name is null OR name = '';
mysql> Select * from example where name is null OR name = '';
+----+------+
| id | name |
+----+------+
| 2 | |
| 3 | |
| 4 | NULL |
+----+------+
3 rows in set (0.00 sec)



 このコードは、扱うべきなのがNULLか空文字列なのかが分からない場合にSQLで処理するための安全な方法といえる。

 終わりに近づいてきたが、もう1つだけコツをお知らせしておこう。もう1つ、IDつきの行をNULLとして挿入する。


mysql> INSERT INTO `example` (`id`, `name` ) values ('', 'finalrow');
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from example where id IS NULL;
+----+----------+
| id |   name   |
+----+----------+
| 5  | finalrow |
+----+----------+
1 row in set (0.00 sec)



 奇妙に見えるが、これには理由がある。DelphiやAccessなどいくつかのODBCアプリケーションの場合、次のクエリで新しく挿入された行を探し出すことができる。


SELECT * FROM tbl_name WHERE auto IS NULL; 
--http://dev.mysql.com/doc/mysql/en/ODBC_and_last_insert_id.html



 同じ命令文をこの後に実行すると、予想通りの結果となる。


mysql> select * from example where id IS NULL;
Empty set (0.00 sec)



 これで、NULLと空文字列の違いと、PHPとMySQLで安全にそれらを扱う方法をご理解していただけたことだろう。ではまた!

(著者:Shikhar Kumar)

原文へのリンク


前のページ     1    2    3    4   

Copyright © 2008 Ziff Davis Enterprise, Inc.
Originally appearing in the U.S. Edition of Dev Shed. All Rights Reserved.