2016-08-20 6 views
1

Ich möchte ein leeres Feld in einem MySQL Numeric Feld haben. Wenn ich das Feld so definiere, dass ein NULL-Wert zulässig ist, wird standardmäßig 0,00 verwendet. Manchmal bevorzuge ich für diesen Zeilenposten keinen Wert. Ich könnte wahrscheinlich eine andere Tabelle erstellen, um diese wenigen Elemente zu verfolgen, aber an dieser Stelle bevorzuge ich eine Ein-Tabellen-Lösung.Ist es möglich, ein leeres numerisches MySQL-Feld zu haben?

+2

Der richtige Ansatz ist 'NULL' zu verwenden. Das ist ganz anders als 0,00, also weiß ich nicht, warum ein 'NULL' auf einen legitimen Wert gesetzt wird. –

+0

Mysql ist unwahrscheinlich, Null-Werte in eine Zahl zu konvertieren, es sei denn, es wird angewiesen, dies zu tun. Es ist jedoch möglich, dass Sie eine leere Zeichenfolge als Wert anstelle von Null übergeben, die in 0 konvertiert wird. – Shadow

Antwort

1

Weil Sie dies mit DEFAULT getan haben. Tun Sie das nicht:

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

Works für mich auf 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

Beachten Sie, dass es so etwas wie MySQL 14.14 nicht gibt. Das klingt wie eine Client-Version, aber Clients sind im Allgemeinen abwärtskompatibel und manchmal vorwärtskompatibel. Die Serverversion wird mit der Abfrage 'SELECT @@ VERSION; 'gefunden. –

+0

Fest, danke .. – creativeChips

Verwandte Themen