11年ほど前に書いた日記がふと目にとまりました。CHAR(0)という列を定義できるというお話。
sakaik.hateblo.jp
当時のバージョンが明記されていないため、よくわからないのですが、最新の 8.0.20では挙動が変わっているようです。
mysql> CREATE TABLE t1 ( a CHAR(0), b VARCHAR(0)); Query OK, 0 rows affected (0.01 sec) mysql> INSERT INTO t1 VALUES ("ABCDE", "FGHI"); ERROR 1406 (22001): Data too long for column 'a' at row 1
ちゃんとエラーとして動作するようになりました!(というか勝手に切り捨てるのをやめただけとも言う)
当時の実行結果で、WARNING をちゃんと見ておけばよかったと悔やまれますが、おそらく「自動で切り捨てられました」みたいな警告が出ていたのでしょうね。
mysql> INSERT INTO t1 VALUES ("", ""); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO t1 VALUES ("", null); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM t1; +------+------+ | a | b | +------+------+ | | | | | NULL | +------+------+ 2 rows in set (0.00 sec)
ちゃんと(ゼロバイト以内の)値も入ります!
・・・・依然として、使い道はわかりません。
.