MySQL: CHAR(0)の動作が変わっていた

 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)

 ちゃんと(ゼロバイト以内の)値も入ります!


 ・・・・依然として、使い道はわかりません。

.