2016-08-20 7 views
1

MySQLの数値フィールドに空のフィールドが必要です。 NULL値を許可するようにフィールドを定義すると、デフォルトは0.00になります。時にはこの行項目のために私は価値がないことを好みます。私はおそらく、これらのいくつかの項目を追跡するために別のテーブルを作成することができますが、この時点で私は1つのテーブルソリューションを好む。空のMySQL数値フィールドを使用することはできますか?

+2

正しいアプローチは、 'NULL'を使用することです。これは0.00とはかなり異なるので、なぜNULLが正当な値にデフォルトするのかわかりません。 –

+0

Mysqlは、指示されない限り、 'null'値を数値に変換することはまずありません。しかし空の文字列をnullではなく値として渡して0に変換する可能性があります。 – Shadow

答えて

1

これはDEFAULTで行ったためです。それをしないでください。

create table t1 
( id int auto_increment primary key, 
    thing varchar(100) not null, 
    anInt NUMERIC(5,2) NULL DEFAULT 0 
); 

insert t1(thing) values ('fish'); 
select * from t1; 
+----+-------+-------+ 
| id | thing | anInt | 
+----+-------+-------+ 
| 1 | fish | 0.00 | 
+----+-------+-------+ 
1

作品を私のためのMySQL 5.7.12に:

mysql> create table X (a double null); 
Query OK, 0 rows affected (0.01 sec) 

mysql> desc X; 
+-------+--------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+-------+--------+------+-----+---------+-------+ 
| a  | double | YES |  | NULL |  | 
+-------+--------+------+-----+---------+-------+ 
1 row in set (0.00 sec) 

mysql> alter table X add column b int; 
Query OK, 0 rows affected (0.01 sec) 
Records: 0 Duplicates: 0 Warnings: 0 

mysql> desc X; 
+-------+---------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+-------+---------+------+-----+---------+-------+ 
| a  | double | YES |  | NULL |  | 
| b  | int(11) | YES |  | NULL |  | 
+-------+---------+------+-----+---------+-------+ 
2 rows in set (0.00 sec) 

mysql> insert into X (a) values (1.3); 
Query OK, 1 row affected (0.00 sec) 

mysql> insert into X (b) values (1); 
Query OK, 1 row affected (0.00 sec) 

mysql> select * from X; 
+------+------+ 
| a | b | 
+------+------+ 
| 1.3 | NULL | 
| NULL | 1 | 
+------+------+ 
2 rows in set (0.00 sec) 
+0

MySQL 14.14のようなものはありません。これはクライアントバージョンのように聞こえるが、クライアントは一般に下位互換性があり、互換性がある場合もある。サーバのバージョンはクエリ 'SELECT @@ VERSION;'で検索されます。 –

+0

固定、ありがとう.. – creativeChips

関連する問題