128 意味着总共有 7 个用户权限:
1 1 1 1 1 1 1 = 0177 = 0x7F = 127
MySQL 已经对此有一个抽象,称为SET
type,它本质上将您的命名/可见值映射到二进制值。因此,如果您有一个设置列 user_right:
('Execute', 'Write', 'Read')
它们实际上将存储在服务器后端,如下所示:
(1, 2, 4)
这允许正常查询,例如:
SELECT * FROM user WHERE user_right LIKE '%Write%';
或使用FIND_IN_SET
:
SELECT * FROM user WHERE FIND_IN_SET('Write',user_right) > 0;
或直接位集操作:
SELECT * from user WHERE user_right & 2;
仅举几例。如果您将 an 添加ORDER BY user_right
到您的选择查询中,它会以数字(非字母)顺序返回它们,否则您可以通过以下方式快速确定用户的值:
SELECT user_name, user_right FROM user;
并看到返回值是:
'some user' | Read,Write
同时仍然具有快速过滤的按位运算的好处,例如:
SELECT user_name, user_right FROM user WHERE user_right & ~1;
返回所有具有读写权限但没有执行权限的用户。