2016-07-11 15 views
0

Ich möchte verwenden ENUM Feature in Tabelle mit MySQL.Warum speichert ENUM nicht mehrere Werte in MySQL?

Ich habe eine Tabelle erstellt tbl_test mit ID als Primärschlüssel und enum_col Feld als ENUM Datentyp.

CREATE TABLE tbl_test(
id INT NOT NULL AUTO_INCREMENT, 
enum_col ENUM('a','b','c') NOT NULL, 
PRIMARY KEY (id) 
); 

Wenn ich versuche,einzigen ENUM-Wert zu speichern, wurde es eingeführt, aber wenn ich versuche, mehr ENUM-Werte zu speichern dann wirft es SQL-Fehler.

ERROR:

Data truncated for column 'enum_col' at row 1 

Einzel ENUM-Wert (RICHTIG):

INSERT INTO tbl_test(id, enum_col) values(1, 'a'); 

Multiple ENUM-Werte (nicht):

INSERT INTO tbl_test(id, enum_col) values(2, 'a,b'); 

Irgendwelche Idee zu speichern mehrere Werte in ENUM Datentyp?

+0

ENUM speichern möchten, nicht ein Satz oder Array-Typ. Anstatt Wertefelder zu speichern, sollten Sie Ihre Daten normalisieren, damit alle normalen Abfrage- und Integritätsfunktionen in MySQL verwendet werden können. – reaanb

Antwort

1

Das ist, weil Sie nur einen Wert darin speichern können und tatsächlich sollten Sie absolut nur einen Wert in welcher Art von Spalte speichern.

Verwenden Sie eine separate Tabelle. Dann können Sie mit mehreren Datensätzen beliebig viele Werte speichern. Beispiel:

tbl_test 
-------- 
id | name 
1 | test_X 
2 | test_Y 
3 | test_Z 


tbl_test_enums 
-------------- 
test_id | enum_value 
1  | a 
1  | b 
2  | a 
3  | c 
+0

Danke. @juergen. Ist es gut, wenn ich SET anstelle von ENUM verwende, weil Werte nicht dupliziert werden? – iNikkz

+1

Speichern Sie niemals mehrere Werte in einer einzigen Spalte! Tu es einfach nicht. Es ist schlecht für die Leistung und schlechtes Tischdesign. –

+2

Bitte gehen Sie durch diesen Beitrag: [** Ist das Speichern einer begrenzten Liste in einer Datenbankspalte wirklich so schlimm? **] (http://stackoverflow.com/questions/3653462/is-storing-a-delimited-list-in -a-Datenbank-Spalte-wirklich-so-schlecht). @iNikkz – 1000111