一个非常有趣的MySql字段类型 SET

SET类型在定义的时候是一组值的集合,像这样

SET(value1,value2,value3,...)

他有点像枚举(ENUM)类型,但有别与枚举(ENUM)的是 枚举(ENUM)是一个单选集合,SET类型是一个多选集合

我们知道SET类型集合的索引是从1开始依次为 1,2,4,8,...,最大可以有64个值,可以看出这个数列分别对应的是2n,n从0开始

有趣的是 这个索引(数列),任意一组索引的和都是唯一的

所以可以用一个唯一整数来确定到底选中了哪几个值。
比如 1 + 2 + 4 = 7就表示 value1,value2,value3被选中了
假如我们用 1表示选中,0表示不选中
那么value1,value2,value3 都选中就是 111
如果选中value1,value2,value4的话就是1101,那么value 1 2 4 的索引的和是1 + 2 + 8 = 11

111 和 7 = 20 + 21 + 22
1101 和 11 = 20 + 21 + 0+23
索引的值 = 2n
单纯觉得有趣,仅此而已。

Tips
在sqlserver的开发中,常自己拼接一组值来指定一个多选属性
比如会定义一个药品的管理方式,以前的做法是用1234567890abcdef...来定义不同的类型,然后拼接成字符串存放在后台,在查询的时候会用到charindex来判断是否满足条件,其实也可以做的像mysql set类型一样灵活