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とはまた別)として扱われると。
OracleはOracleで空データ突っ込むとNULL扱いで、それも嫌だったりするんだが…。
単にtrimかと思いきや、' DATA 'を突っ込むとちゃんと前後の空白を含めて扱われる。
むぅ…