在MySQL中,表的字段可以使用逗號(hào)進(jìn)行分隔。但是有時(shí)會(huì)發(fā)現(xiàn),有些程序在建表時(shí)會(huì)將一個(gè)字段的屬性中的多個(gè)值使用逗號(hào)分隔,并放在同一個(gè)字段中,導(dǎo)致字段之間的逗號(hào)數(shù)量不一致。這時(shí)候 MySQL 應(yīng)該如何處理呢?
CREATE TABLE my_table ( my_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, my_field VARCHAR(100) NOT NULL, PRIMARY KEY (my_id) ) ENGINE=InnoDB;
上面的代碼創(chuàng)建了一個(gè)簡(jiǎn)單的表,包括一個(gè) ID 和一個(gè) VARCHAR 字段。但是如果想要在 VARCHAR 字段中存儲(chǔ)多個(gè)值,怎么辦呢?
CREATE TABLE my_table ( my_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, my_field_1 VARCHAR(100) NOT NULL, my_field_2 VARCHAR(100) NOT NULL, PRIMARY KEY (my_id) ) ENGINE=InnoDB;
以上代碼創(chuàng)建了一個(gè)包含兩個(gè) VARCHAR 字段的表。假設(shè)需要將一個(gè)字段中的值“1,2,3”分割開來存儲(chǔ)。可以使用 MySQL 字符串函數(shù)來實(shí)現(xiàn)。
INSERT INTO my_table (my_field_1, my_field_2) VALUES ('1,2,3', '');
使用上面的代碼將“1,2,3”插入到 my_field_1 中,同時(shí)在 my_field_2 中插入一個(gè)空字符串。這樣做的目的是保證每個(gè)字段有相同的逗號(hào)數(shù)量,方便后續(xù)的操作。
SELECT my_id, SUBSTRING_INDEX(my_field_1, ',', 1) AS my_field_1_1, SUBSTRING_INDEX(SUBSTRING_INDEX(my_field_1, ',', 2), ',', -1) AS my_field_1_2, SUBSTRING_INDEX(SUBSTRING_INDEX(my_field_1, ',', 3), ',', -1) AS my_field_1_3 FROM my_table;
通過使用 SUBSTRING_INDEX 函數(shù),可以將一個(gè)含有多個(gè)值的字段拆分為多個(gè)字段。使用上述代碼,可以得到以下結(jié)果:
+------+-------------+-------------+-------------+ | my_id | my_field_1_1| my_field_1_2| my_field_1_3| +------+-------------+-------------+-------------+ | 1 | 1 | 2 | 3 | +------+-------------+-------------+-------------+
以上代碼將 my_field_1 拆分成了三個(gè)新字段,分別是 my_field_1_1、my_field_1_2 和 my_field_1_3。
總的來說,MySQL 中的字段逗號(hào)分為兩個(gè)并不會(huì)影響到數(shù)據(jù)庫(kù)的正常操作。可以通過合理的建表和字符串函數(shù)的使用,實(shí)現(xiàn)對(duì)逗號(hào)分割字段的處理。