NeverBlog::Likk::Unexistable;

見なかったことにして下さい

VARCHAR に半角空白を突っ込んだときの備忘録

何か納得いかないが、仕様ということで。

mysql> CREATE TABLE `TEST` (
    -> `NUM` INT NOT NULL ,
    -> `STRING` VARCHAR( 255 ) NOT NULL ,
    -> `CHR` CHAR( 1 ) NOT NULL ,
    -> `DAY` DATE NOT NULL ,
    -> `BIN` BLOB NOT NULL
);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into `TEST`
    -> (STRING)
    -> values (' ')
    -> ;
Query OK, 1 row affected (0.00 sec)

mysql> select * from `TEST` where STRING = ''
    -> ;
+-----+--------+-----+------------+-----+
| NUM | STRING | CHR | DAY        | BIN |
+-----+--------+-----+------------+-----+
|   0 |        |     | 0000-00-00 |     |
+-----+--------+-----+------------+-----+
1 row in set (0.00 sec)

mysql> select * from `TEST` where STRING = ' '
    -> ;
+-----+--------+-----+------------+-----+
| NUM | STRING | CHR | DAY        | BIN |
+-----+--------+-----+------------+-----+
|   0 |        |     | 0000-00-00 |     |
+-----+--------+-----+------------+-----+
1 row in set (0.00 sec)

mysql> select * from `TEST` where STRING = '    '
    -> ;
+-----+--------+-----+------------+-----+
| NUM | STRING | CHR | DAY        | BIN |
+-----+--------+-----+------------+-----+
|   0 |        |     | 0000-00-00 |     |
+-----+--------+-----+------------+-----+
1 row in set (0.00 sec)

mysql> select * from `TEST` where STRING is NULL
    -> ;
Empty set (0.00 sec)

ようするに半角空白n文字分だけのデータは、空データ(NULLとはまた別)として扱われると。
OracleOracleで空データ突っ込むとNULL扱いで、それも嫌だったりするんだが…。

単にtrimかと思いきや、' DATA 'を突っ込むとちゃんと前後の空白を含めて扱われる。
むぅ…