NULL, NOT NULL, DEFAULT, SET,ENUM,データ型などによる
Default値の変化について。


mysql> CREATE TABLE defaults (
-> id INT UNSIGNED NOT NULL UNIQUE,
-> col1 INT NULL,
-> col2 INT NOT NULL,
-> col3 INT DEFAULT 42,
-> col4 CHAR(5) NULL,
-> col5 CHAR(5) NOT NULL,
-> col6 CHAR(5) DEFAULT 'yoo',
-> col7 TEXT NULL,
-> col8 TEXT NOT NULL,
-> col9 TIME NOT NULL,
-> col10 DATE NULL,
-> col11 DATE NOT NULL,
-> col12 DATE DEFAULT '2002-02-08',
-> col13 ENUM('doo','yoo'),
-> col14 SET('blabla','yooyoo'),
-> col15 ENUM('doo','yoo') NOT NULL,
-> col16 SET('blabla','yooyoo') NOT NULL
-> );
Query OK, 0 rows affected (0.01 sec)

mysql> desc defaults;
+-------+------------------------+------+-----+------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------------+------+-----+------------+-------+
| id | int(10) unsigned | NO | PRI | NULL | |
| col1 | int(11) | YES | | NULL | |
| col2 | int(11) | NO | | NULL | |
| col3 | int(11) | YES | | 42 | |
| col4 | char(5) | YES | | NULL | |
| col5 | char(5) | NO | | NULL | |
| col6 | char(5) | YES | | yoo | |
| col7 | text | YES | | NULL | |
| col8 | text | NO | | NULL | |
| col9 | time | NO | | NULL | |
| col10 | date | YES | | NULL | |
| col11 | date | NO | | NULL | |
| col12 | date | YES | | 2002-02-08 | |
| col13 | enum('doo','yoo') | YES | | NULL | |
| col14 | set('blabla','yooyoo') | YES | | NULL | |
| col15 | enum('doo','yoo') | NO | | NULL | |
| col16 | set('blabla','yooyoo') | NO | | NULL | |
+-------+------------------------+------+-----+------------+-------+
17 rows in set (0.01 sec)

64

mysql> INSERT INTO defaults (id) VALUES (1);
Query OK, 1 row affected, 6 warnings (0.00 sec)

mysql> show warnings;
+---------+------+--------------------------------------------+
| Level | Code | Message |
+---------+------+--------------------------------------------+
| Warning | 1364 | Field 'col2' doesn't have a default value |
| Warning | 1364 | Field 'col5' doesn't have a default value |
| Warning | 1364 | Field 'col8' doesn't have a default value |
| Warning | 1364 | Field 'col9' doesn't have a default value |
| Warning | 1364 | Field 'col11' doesn't have a default value |
| Warning | 1364 | Field 'col16' doesn't have a default value |
+---------+------+--------------------------------------------+
6 rows in set (0.00 sec)

mysql> select * from defaults\G
*************************** 1. row ***************************
id: 1
col1: NULL
col2: 0
col3: 42
col4: NULL
col5:
col6: yoo
col7: NULL
col8:
col9: 00:00:00
col10: NULL
col11: 0000-00-00
col12: 2002-02-08
col13: NULL
col14: NULL
col15: doo
col16:
1 row in set (0.00 sec)

mysql>

※データ型やNULL値を許容するかしないかにより値が変わる。
※TEXT型にはDefault値が利用出来ない。
※その他

def64

6.2.3.3. ENUM 型

ENUM 型は、テーブルの作成時にカラムの仕様で明示的に列挙された使用可能な
値のリストから、通常、値が選択される文字列オブジェクトです。

* 不正な値(使用可能な値のリストに含まれない文字列)を ENUM 型のカラムに挿入すると、
特殊なエラー値として、空の文字列が挿入される。この文字列は数値 0 を持つため、’通常’ の空の
文字列とは区別することができる(これについては後述)。

* ENUM 型が NULL として宣言されている場合、そのカラムでは NULL も正しい値となり、
デフォルト値は NULL になる。ENUM 型が NOT NULL として宣言されている場合は、
使用可能な値の最初の要素がデフォルト値として使用される。

Comments are closed.

Post Navigation