MySQL 数据类型 BIT: 使用技巧(mysql类型bit)

及实际应用

MySQL数据库支持一种特殊的TINYINT变量,称为「BIT」,它可以存储0-255的值,这里的每一位表示一个值。

我们可以使用它来存储一些「开关」类型的值,例如我们有一个对象,它有多个属性,我们可以把它们的属性分别映射到BIT的8位,用1或者0来表示是否有该属性,存储起来效率非常高。当然,BIT所表示的数据范围是有限的,远比不上许多其他容纳非常详细数据的字段,但是它却十分节省内存,而且更能体现出某个对象的全部性格特征,一张图片所能传达的意义就是一个BIT所能表达的意义的百分之一。

在MySQL中使用BIT字段的使用技巧:

1.定义table:

Create TABLE tablename (  
id INT,
flag BIT(8)
);

2.数据更新和查询,假设flag映射第一位为动物属性,1:表示有该属性,0:表示无该属性。

Update tablename SET flag = 0b00000001 WHERE id=1;
Select * FROM tablename WHERE flag & 0b00000001;

上面的SQL会返回所有flag第一位为1的行,位运算符&,先转为二进制,再位运算,以匹配指定属性。

实际应用:

MySQL的BIT类型在管理用户类型、权限等应用比较多,我们可以使用它在用户表中编码权限,便于查询。

举个例子,总共有4种用户角色:super管理员,管理员,普通用户,游客,下面创建表结构并存储用户角色:

Create TABLE User(  
id INT,
role BIT(4)
);

Update User SET role=0b1000 WHERE id=1;
Update User SET role=0b0100 WHERE id=2;
Update User SET role=0b0010 WHERE id=3;
Update User SET roles=0b0001 WHERE id=4;

以上SQL语句表明id为1的用户为super管理员角色,id为2的用户为管理员角色,以此类推。

查询:

Select * FROM User WHERE role & 0b1000; 

上述SQL查询语句,将返回No.1用户, 既super管理员。

综上所述,MySQL的BIT数据类型十分有用,可以不占用内存存储大量有关联的数据,而且可以非常方便的查询。使用它,可以在程序里将更多内容用更少内存空间来存储,极大地提高性能。


数据运维技术 » MySQL 数据类型 BIT: 使用技巧(mysql类型bit)