sql >> データベース >  >> RDS >> Mysql

MySQLの列挙型はNOTNULLである必要がありますか?

    NOT NULLを指定しない場合、MySQLは値をNULLにすることを許可します 列定義で。

    簡単なテストは次のとおりです:

    mysql> create table test (id serial, field ENUM('Y','N') DEFAULT 'N');
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> INSERT INTO test (field) VALUES ('Y');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> INSERT INTO test (field) VALUES ('N');
    Query OK, 1 row affected (0.00 sec)
    
    mysql> INSERT INTO test () VALUES ();
    Query OK, 1 row affected (0.00 sec)
    
    mysql> INSERT INTO test (field) VALUES (NULL);
    Query OK, 1 row affected (0.00 sec)
    
    mysql> INSERT INTO test (field) VALUES ('Invalid');
    Query OK, 1 row affected, 1 warning (0.01 sec)
    
    mysql> show warnings;
    +---------+------+--------------------------------------------+
    | Level   | Code | Message                                    |
    +---------+------+--------------------------------------------+
    | Warning | 1265 | Data truncated for column 'field' at row 1 | 
    +---------+------+--------------------------------------------+
    1 row in set (0.00 sec)
    
    mysql> select * from test;
    +----+-------+
    | id | field |
    +----+-------+
    |  1 | Y     | 
    |  2 | N     | 
    |  3 | N     | 
    |  4 | NULL  | 
    |  5 |       | 
    +----+-------+
    5 rows in set (0.00 sec)
    

    したがって、MySQLはデフォルト値を尊重しますが、NULLも許可します。 (興味深いことに、無効な値が切り捨てられ、空白の文字列も許可されますが、これは別の問題です)



    1. MySQL8の構成

    2. byte[]の適切なHibernateアノテーション

    3. 自己参照テーブルで親と子を照会します

    4. MySQL-タイムスタンプ列から2時間ごとの間隔を選択します