SET:
多选字符串数据类型, 适合存储 "多个值".
设定 set 的时候, 同样需要设定 "固定的几个值"; 存储的时候, 可以存储其中的若干个值.
设定 set 的格式:
字段名称 SET("选项 1","选项 2",...,'选项 n')
同样的, set 的每个选项值也对应一个数字, 依次是 1,2,4,8,16..., 最多有 64 个选项
使用的时候, 可以使用 set 选项的字符串本身 (多个选项用逗号分隔), 也可以使用多个选项的数字之和 (比如: 1+2+4=7)
--1. 创建及插入
- /* 创建表格 */
- create table set_table(
- id int auto_increment primary key,
- hobby set('music','movie','swimming','footbal')
- );
- /* 使用选项的字符串格式 */
- insert into set_table(id,hobby) values(null,'M','music');
- /* 使用选项的字符串格式 */
- MySQL> insert into enum_set_table(id,hobby) values(null,'F','music,movie,footbal');
- /* 使用选项的数字格式 */
- insert into set_table(id,hobby) values(null,1);
- /* 使用选项的数字格式, 15=1+2+4+8 <=> 'music,movie,swimming,footbal' */
- insert into set_table(id,hobby) values(null,15);
- /* 查询结果 */
- select * from enum_set_table;
--2. 查询
-- 找出 SET_col 包含 value set 成员的行.
SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;
-- 在其它地方找出 set_col 包含 value 的行, 甚至是在另一个 SET 成员的子字符串中.
SELECT * FROM tbl_name WHERE set_col LIKE '%value%';
-- 寻找包含第 1 个 set 成员的值.
SELECT * FROM tbl_name WHERE set_col & 1;
-- 寻找一个确切匹配的值.
SELECT * FROM tbl_name WHERE set_col = 'val1,val2';
-- 应注意将 set 值与'val1,val2'比较返回的结果与同'val2,val1'比较返回的结果不同. 指定值时的顺序应与在列定义中所列的顺序相同.
来源: http://www.bubuko.com/infodetail-2956128.html